mapTheme <- function(base_size = 12) {
  theme(
    text = element_text( color = "black", size=12),
    plot.title = element_text(size = 13,colour = "black"),
    plot.subtitle=element_text(face="italic"),
    plot.caption=element_text(hjust=0),
    axis.ticks = element_blank(),
    panel.background = element_blank(),axis.title = element_blank(),
    axis.text = element_blank(),
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_rect(colour = "black", fill=NA, size=2)
  )
}

plotTheme <- function(base_size = 12) {
  theme(
    text = element_text( color = "black", size=12),
    plot.title = element_text(size = 14,colour = "black"),
    plot.subtitle = element_text(face="italic"),
    plot.caption = element_text(hjust=0),
    axis.ticks = element_blank(),
    panel.background = element_blank(),
    panel.grid.major = element_line("grey80", size = 0.1),
    panel.grid.minor = element_blank(),
    panel.border = element_rect(colour = "black", fill=NA, size=2),
    strip.background = element_rect(fill = "lightskyblue1", color = "white"),
    strip.text = element_text(size=12),
    axis.title = element_text(size=12),
    axis.text = element_text(size=10),
    plot.background = element_blank(),
    legend.background = element_blank(),
    legend.title = element_text(colour = "black", face = "italic"),
    legend.text = element_text(colour = "black", face = "italic"),
    strip.text.x = element_text(size = 14)
  )
}

palette5 <- c("#25CB10", "#5AB60C", "#8FA108",   "#C48C04", "#FA7800")

Intro

This analysis aims to create a tool that can be used by city housing departments across the United States as a means of predicting and preventing potential residential displacement. We pilot this idea with the Philadelphia Division of Housing and Community Development in mind, in an effort to help the division allocate limited housing resources to vulnerable residents.

Our method uses issuance of new construction permits as an indicator of displacement risk. Neighborhoods with significant new construction often experience higher levels of displacement, which we define as the movement of longtime residents due to uneven distribution of home value increases. New construction and renovation increases home values, but also raises property taxes on nearby older homes, whose owners do not benefit from the physical improvements themselves. This increase in cost of living can act to drive lower income residents out of the neighborhood in search of more affordable areas, which are likely further away from amenities such as public transportation, schools, and green spaces.

This Displacement Tracker Tool works to prevent displacement in three key ways:

1 By anticipating neighborhoods where home values may increase and threaten the ability of existing residents to remain;

2 By identifying trusted community partners in each area of the city to communicate effectively with local residents based on established trust; and

3 By estimating the benefit various policy levers, such as flip taxes or home renovation subsidies, can have on the long-time residents of each neighborhood.

Because homeowners are often rightly skeptical of communications regarding their property and its value, we strive to ensure that this information comes from an already proven and trusted source. This data-driven and community facilitated approach to displacement prevention is a new method for addressing the issue that many other cities and regions would benefit from implementing. We hope that this open-data analysis will serve as a basis for cities looking to rethink their response to displacement.

Data

Underlying our Displacement Tracker Tool is a model that uses a variety of data to predict the count of residential building permits across the city. The Tool also incorporates data on potential outreach partners, who are trusted organizations within communities. Most data area gathered from OpenDataPhilly, the City of Philadelphia’s catalog of available data in the Philadelphia region. We also use data from the U.S. Census Bureau’s 2018 5-year American Community Survey to understand information about the population such as education level and median income. The sections below describe our process for gathering and cleaning various datasets.

Base data

To begin, we gather Philadelphia new construction permit data from 2015 through 2019 from the Licenses and Inspections Building and Zoning Permit Dataset. These data from the Department of Licenses & Inspections provide the date, location, and a variety of ancillary information about building permits in the city. Building permits are required before the start of a specific construction activity to enlarge, repair, change, add or, or demolish a structure, and to install equipment or systems in a structure. From this dataset, we’ve selected only new construction permits, as we believe that new construction is a strong primary indicator of displacement risk for longtime residents. Areas with large amounts of new construction permits may indicate an early warning sign for neighborhood changes that can increase the risk of longtime resident displacement. As renovation and construction occurs on a high density of residential properties, neighborhoods can become more expensive, experience higher real estate taxes that may burden lower income residents, and/or experience cultural shifts that may make longtime residents feel they no longer belong.1.

Importantly, we also gather data on locations and contact information for Philadelphia Registered Community Organizations (RCOs), which are community groups that are concerned with the physical development of their community. RCOs get advance notice of projects that will be reviewed by the Zoning Board of Adjustment or the Civic Design Review Committee; organize and conduct public meetings where community members can comment on planned developments in their neighborhood; and get notifications from the Philadelphia City Planning Commission whenever a zoning variance or special exception is requested or when development requiring Civic Design Review is proposed. We use this RCO data to identify potential trusted community partners within each neighborhood that may be able to communicate effectively with local residents based on established trust.

#residential building permit

permits <- 
  st_read("https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+permits+WHERE+permitissuedate+>=+'2015-01-01'+AND+permitissuedate+<+'2019-12-31'AND+permitdescription+=+'NEW+CONSTRUCTION+PERMIT'&filename=permits&format=geojson&skipfields=cartodb_id") %>% 
    st_transform('ESRI:102729') 
## Reading layer `OGRGeoJSON' from data source `https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+permits+WHERE+permitissuedate+>=+'2015-01-01'+AND+permitissuedate+<+'2019-12-31'AND+permitdescription+=+'NEW+CONSTRUCTION+PERMIT'&filename=permits&format=geojson&skipfields=cartodb_id' using driver `GeoJSON'
## replacing null geometries with empty geometries
## Simple feature collection with 9062 features and 30 fields (with 2 geometries empty)
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -75.25937 ymin: 39.88034 xmax: -74.96128 ymax: 40.13514
## geographic CRS: WGS 84
# ggplot() +
#   geom_sf(data = permits)

#mapview(permits)

boundary<-
st_read("http://data.phl.opendata.arcgis.com/datasets/405ec3da942d4e20869d4e1449a2be48_0.geojson") %>%
st_transform('ESRI:102729') %>%
st_union()
## Reading layer `f6ac8dd0-e0ae-42cf-a587-c9b3a912cc502020329-1-1pq5eo1.ai8h' from data source `http://data.phl.opendata.arcgis.com/datasets/405ec3da942d4e20869d4e1449a2be48_0.geojson' using driver `GeoJSON'
## Simple feature collection with 1 feature and 3 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -75.28031 ymin: 39.86747 xmax: -74.95575 ymax: 40.13793
## geographic CRS: WGS 84
# ggplot() +
#   geom_sf(data = boundary)

rcos <-
st_read("http://data.phl.opendata.arcgis.com/datasets/efbff0359c3e43f190e8c35ce9fa71d6_0.geojson") %>%
st_transform('ESRI:102729')
## Reading layer `Zoning_RCO' from data source `http://data.phl.opendata.arcgis.com/datasets/efbff0359c3e43f190e8c35ce9fa71d6_0.geojson' using driver `GeoJSON'
## Simple feature collection with 281 features and 21 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -75.28031 ymin: 39.86747 xmax: -74.95574 ymax: 40.13793
## geographic CRS: WGS 84

Next, we create a geospatial dataset to help us understand the smooth variation of displacement risk across the city. This key element of our analysis is the “fishnet,” a continuous grid pattern overlay in which every polygon is connected on all sides to the other polygon neighbors. This analysis uses a fishnet with 500x500 foot grid cells. We use a fishnet to treat displacement risk (presence of new construction permits) as a phenomenon that varies continuously across space. We will use the fishnet to aggregate point-level data.

The figure below shows the count of new construction permits across the fishnet. Grid cells shown in yellow have the largest number of permits. These locations are primarily concentrated in the Center City and North East Philadelphia areas.

# create the fishnet

# uses grid.arrange to organize independent plots
grid.arrange(ncol=2,
ggplot() + 
  geom_sf(data = boundary) +
  geom_sf(data = permits, colour="red", size=0.1, show.legend = "point") +
  labs(title= "Permits, Phil - 2010-2020")+
  mapTheme(),
ggplot() + 
  geom_sf(data = boundary, fill = "grey40") +
  stat_density2d(data = data.frame(st_coordinates(permits)), 
                 aes(X, Y, fill = ..level.., alpha = ..level..),
                 size = 0.01, bins = 40, geom = 'polygon') +
  scale_fill_viridis() +
  scale_alpha(range = c(0.00, 0.35), guide = FALSE) +
  labs(title = "Density of Permits") +
  theme(legend.position = "none")+
  mapTheme())

#Fishnet code
fishnet <- 
  st_make_grid(boundary,
               cellsize = 500, 
               square = TRUE) %>%
  .[boundary] %>%
  st_sf() %>%
  mutate(uniqueID = rownames(.))

permit_net <- 
  dplyr::select(permits) %>% #an SF point object
  mutate(countpermits = 1) %>% #giving value of one to each point
  aggregate(., fishnet, sum) %>% #aggregate points. period represents burglaries. sum number of "1" points that fall within each grid cell. aggregate is a type of spatial join. normally would do a join and them summarize, but this does both in one step. 
  mutate(countpermits = replace_na(countpermits, 0), #where there weren't any crimes
         uniqueID = rownames(.),#make into a column
         cvID = sample(round(nrow(fishnet) / 24), 
                       size=nrow(fishnet), replace = TRUE)) #adding a random number to each grid cell for cross validation later

ggplot() +
  geom_sf(data = permit_net, aes(fill = countpermits), color = NA) +
  scale_fill_viridis() +
  labs(title = "Count of Permits for the fishnet") +
  mapTheme()

Next we gather data on the boundaries of Philadelphia’s neighborhoods. We will use neighborhood’s as a unit of analysis for both cross-validation of the predictive model and to understand locations of greatest risk.

#nhood <- st_read("/Users/ashabazil/Documents/GitHub/geo-data/Neighborhoods_Philadelphia/Neighborhoods_Philadelphia.geojson") %>%
#st_transform(st_crs(fishnet)) 

#Should work for both of us using this link
nhood<- st_read("https://raw.githubusercontent.com/azavea/geo-data/2e0c6a9f42d862e39dcee292b851000c973e6de2/Neighborhoods_Philadelphia/Neighborhoods_Philadelphia.geojson") %>%
st_transform(st_crs(fishnet)) 
## Reading layer `Neighborhoods_Philadelphia' from data source `https://raw.githubusercontent.com/azavea/geo-data/2e0c6a9f42d862e39dcee292b851000c973e6de2/Neighborhoods_Philadelphia/Neighborhoods_Philadelphia.geojson' using driver `GeoJSON'
## Simple feature collection with 158 features and 8 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -75.28027 ymin: 39.867 xmax: -74.95576 ymax: 40.13799
## geographic CRS: WGS 84
#ggplot()+
  #geom_sf(data=nhood)+
  #mapTheme()

Home Value Exploration

To further help us understand neighborhood changes that may lead to displacement risk, we gather data from the Department of Records on Real Estate Transfers. The real estate transfers data shows the dates and location of property sales, deeds, mortgages, and sheriff deeds, and includes associated data, such as any realty transfer tax paid. We gathered data for 2017 and 2018, and calculated the percent change in home value in order to categorize each observation as “No Change”, “Increase in Home Value”, “Decrease in Home Value”, or “No Answer.” Because we are focused on changes in home value (and resulting increases in property taxes) as a primary mechanism for driving displacement, we wish to understand the patterns of changes in home values across the city.

In the figure below, we see locations with the greatest density of changes in home value. These locations are concentrated in the Center City area.

#real estate transfer data
#this takes a while
rt <- 
  st_read("https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+RTT_SUMMARY+WHERE+display_date+>='2017-01-01'+AND+display_date+<=+'2018-12-31'AND+opa_account_num+!=+'NA'&format=geojson&skipfields=cartodb_id") %>% 
st_transform('ESRI:102729')
## Reading layer `OGRGeoJSON' from data source `https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+RTT_SUMMARY+WHERE+display_date+>='2017-01-01'+AND+display_date+<=+'2018-12-31'AND+opa_account_num+!=+'NA'&format=geojson&skipfields=cartodb_id' using driver `GeoJSON'
## Simple feature collection with 315757 features and 46 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -75.27436 ymin: 39.88034 xmax: -74.96048 ymax: 40.1377
## geographic CRS: WGS 84
#filter for obs with values
rtt <- rt %>% 
    mutate(adjusted_fair_market_value = replace_na(adjusted_fair_market_value, 0), year = substr(display_date,1,4)) %>% 
    filter(!(adjusted_fair_market_value == 0)) %>% 
    dplyr::select(adjusted_fair_market_value, opa_account_num, year)

#split by year 
rtt_17 <- rtt %>% 
    filter(year == 2017) %>% 
    rename(value_17 = adjusted_fair_market_value) %>% 
    filter(value_17<=9878103)

rtt_18 <- rtt %>% 
    filter(year == 2018) %>% 
    rename(value_18 = adjusted_fair_market_value)


#create difference percent, difference value, and categorical variable
joined<-
  st_join(rtt_17, rtt_18, by = opa_account_num) %>% 
  mutate(difference = value_18-value_17,
         dif_cat= case_when(difference == 0 ~ "No Change", 
                            difference > 0 ~ "Increase in Home Value", 
                            difference < 0 ~ "Decrease in Home Value",
                            # anything that isn't in the above groups (i.e. NA which is No Answer) gets to be No Answer
                            TRUE ~ "No Answer"),
         dif_cat = factor(dif_cat, levels = c("Decrease in Home Value", "Increase in Home Value", "No Change", "No Answer")),
         dif_pct= (difference/value_17)*100) %>%
  filter(!(difference == is.na(.)))

#split by increase and decreased

decreasedHV <-
  joined %>% 
  filter(dif_cat == "Decrease in Home Value", dif_pct <= -3) %>%
  mutate(dif_pct= abs(dif_pct))

increasedHV <-
  joined %>% 
  filter(dif_cat == "Increase in Home Value")

ggplot() + 
  geom_sf(data = boundary, fill = "grey40") +
  stat_density2d(data = data.frame(st_coordinates(joined)), 
                 aes(X, Y, fill = ..level.., alpha = ..level..),
                 size = 0.02, bins = 50, geom = 'polygon') +
  scale_fill_viridis() +
  scale_alpha(range = c(0.00, 0.50), guide = FALSE) +
  labs(title = "Home Value Difference") +
  theme(legend.position = "none")+
  mapTheme()

The figures below depict the increases and decreases in home value between 2017 and 2018 by percentage difference. Locations with greatest increases are generally clustered in the Center City area and locations directly to the north. Locations with greatest decrease are more widely scattered across the city.

# plot magnitude of percentage increases and decreases
#flip color scale for decrease, filter out small decrease differences

grid.arrange(ncol=2,
  ggplot()+
    geom_sf(data = nhood, fill = "grey40") +
    geom_sf(data=increasedHV, aes(color=q5(dif_pct)),
            show.legend="point", size=1)+
    scale_color_viridis(discrete = TRUE,
                        labels=qBr(increasedHV, "dif_pct"),
                        name="Quintile\nBreaks")+
    labs(title="Home Value increases\nbetween 2017 and 2018\nby Percentage Difference")+
    mapTheme(),
  
    ggplot()+
    geom_sf(data = nhood, fill = "grey40") +
    geom_sf(data=decreasedHV, aes(color=q5(dif_pct)),
            show.legend="point", size=1)+
    scale_color_viridis(discrete = TRUE,
                        labels=qBr(decreasedHV, "dif_pct"),
                        name="Quintile\nBreaks")+
    labs(title="Abs Val of Home Value decreases\nbetween 2017 and 2018\nby Percentage Difference")+
    mapTheme())

To further understand changes in home value, the figures below show the distribution of home values across the city in 2018 and 2018. The pattern remains largely the same across the city.

#plot of just property values
rtt_plot<-
  rtt%>%
  filter(year==2018| year == 2017) %>%
  mutate(
         val_cat= case_when(adjusted_fair_market_value >=0 & adjusted_fair_market_value <= 50000 ~ "Less Than $50,000", 
                            adjusted_fair_market_value > 50000 & adjusted_fair_market_value<= 500000  ~ "Between $50,000 and $500,000", 
                            adjusted_fair_market_value > 500000 & adjusted_fair_market_value<= 1000000  ~ "Between $500,000 and $1,000,000",
                            adjusted_fair_market_value > 1000000 & adjusted_fair_market_value<= 2000000  ~ "Between $1 mil and $2 mil",
                            adjusted_fair_market_value > 2000000 & adjusted_fair_market_value<= 3000000  ~ "Between $2mil and $3 mil",
                            adjusted_fair_market_value > 3000000 ~ "Greater Than 3 mil",
                            TRUE ~ "No Answer"),
         val_cat = factor(val_cat, levels = c("Less Than $50,000", "Between $50,000 and $500,000", "Between $500,000 and $1,000,000", "Between $1 mil and $2 mil", "Between $2mil and $3 mil","Greater Than 3 mil","No Answer")))
  

ggplot()+
    geom_sf(data = nhood, fill = "grey40") +
    geom_sf(data=rtt_plot, aes(color=val_cat),
            show.legend="point", size=1)+
    scale_color_viridis(discrete = TRUE,
                        #labels=qBr(rtt_plot, "adjusted_fair_market_value"),
                        name="Property Value")+
    facet_wrap(~year)+
    labs(title="Property Values")+
    mapTheme()

The figures below show the density of locations where home values increased and decreased between 2017 and 2018. Both of these locations are concentrated in the Center City area, with a greater intensity of home value increases in that location.

#denisty of homevalues in 2017 and 2018
#does this show density of greatest home values? or density of where there are home values? We have a lot of plots here so not sure if we need these - let me know what you think!

# rt_10 <- 
#   st_read("https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+RTT_SUMMARY+WHERE+display_date+>='2010-01-01'+AND+display_date+<=+'2010-12-31'AND+opa_account_num+!=+'NA'&format=geojson&skipfields=cartodb_id") %>% 
# st_transform('ESRI:102729')
# 
# #filter for obs with values
# rtt_10 <- rt_10 %>% 
#     mutate(adjusted_fair_market_value = replace_na(adjusted_fair_market_value, 0), year = substr(display_date,1,4)) %>% 
#     filter(!(adjusted_fair_market_value == 0)) %>% 
#     dplyr::select(adjusted_fair_market_value, opa_account_num, year)


# grid.arrange(ncol=2,
# ggplot(rtt_10) + 
#   geom_sf(data = nhood, fill = "grey40") +
#   stat_density2d(data = data.frame(st_coordinates(adjusted_fair_market_value)), 
#                  aes(X, Y, fill = ..level.., alpha = ..level..),
#                  size = 0.02, bins = 50, geom = 'polygon') +
#   scale_fill_viridis() +
#   scale_alpha(range = c(0.00, 0.50), guide = FALSE) +
#   labs(title = "2010") +
#   theme(legend.position = "none")+
#   mapTheme(),
# 
# ggplot(rtt_18) + 
#   geom_sf(data = nhood, fill = "grey40") +
#   stat_density2d(data = data.frame(st_coordinates(value_18)), 
#                  aes(X, Y, fill = ..level.., alpha = ..level..),
#                  size = 0.01, bins = 40, geom = 'polygon') +
#   scale_fill_viridis() +
#   scale_alpha(range = c(0.00, 0.35), guide = FALSE) +
#   labs(title = "2018") +
#   theme(legend.position = "none")+
#   mapTheme())

#density of change in homevalues based on increasing and decreasing
grid.arrange(ncol=2,
ggplot() + 
  geom_sf(data = nhood, fill = "grey40") +
  stat_density2d(data = data.frame(st_coordinates(increasedHV)), 
                 aes(X, Y, fill = ..level.., alpha = ..level..),
                 size = 0.02, bins = 50, geom = 'polygon') +
  scale_fill_viridis() +
  scale_alpha(range = c(0.00, 0.50), guide = FALSE) +
  labs(title = "Locations where Home Values Increased, 2017-2018") +
  theme(legend.position = "none")+
  mapTheme(),

ggplot() + 
  geom_sf(data = nhood, fill = "grey40") +
  stat_density2d(data = data.frame(st_coordinates(decreasedHV)), 
                 aes(X, Y, fill = ..level.., alpha = ..level..),
                 size = 0.01, bins = 40, geom = 'polygon') +
  scale_fill_viridis() +
  scale_alpha(range = c(0.00, 0.35), guide = FALSE) +
  labs(title = "Locations where Home Values Decreased, 2017-2018") +
  theme(legend.position = "none")+
  mapTheme())

311 and Census Data

We also gathered data on 311 Service and Information Requests to included in our predictive model. These data represents all service and information requests submitted to the Philly311 via the 311 mobile application, calls, walk-ins, emails, the 311 website, or social media. From the 311 data, we gathered data from 2015 to 2019 on locations of Sanitation & Dumpster Violations, locations of Dangerous Building Reports, and locations of Vacant Lot Reports. We use these data as variables in the model to help predict locations of residential building permits.

The figures below show the density of locations of these reports and violations, which are distributed across the city.

#https://cityofphiladelphia.github.io/carto-api-explorer/#public_cases_fc

# Sanitation Data
sanitation<-
  st_read("https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+public_cases_fc+WHERE+service_name+=+'Sanitation+/+Dumpster+Violation'OR+service_name+=+'Illegal+Dumping'+AND+requested_datetime+>=+'2015-01-01'+AND+requested_datetime+<+'2019-12-31'&filename=sanitation&format=geojson&skipfields=cartodb_id") %>%
    mutate(year = substr(requested_datetime,1,4)) %>% 
    #filter(year %in% c("2020")) %>%
    dplyr::select(Y = lat, X = lon) %>%
    na.omit() %>%
    st_as_sf(coords = c("X", "Y"), crs = 4326, agr = "constant") %>%
    st_transform(st_crs(fishnet)) %>%
    mutate(Legend = "Sanitation")
## Reading layer `OGRGeoJSON' from data source `https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+public_cases_fc+WHERE+service_name+=+'Sanitation+/+Dumpster+Violation'OR+service_name+=+'Illegal+Dumping'+AND+requested_datetime+>=+'2015-01-01'+AND+requested_datetime+<+'2019-12-31'&filename=sanitation&format=geojson&skipfields=cartodb_id' using driver `GeoJSON'
## replacing null geometries with empty geometries
## Simple feature collection with 133591 features and 16 fields (with 141 geometries empty)
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -75.27571 ymin: 39.87502 xmax: -74.95933 ymax: 40.13528
## geographic CRS: WGS 84
# Service Data
service<-
  st_read("https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+public_cases_fc+WHERE+service_name+=+'Building+Dangerous'+AND+requested_datetime+>=+'2015-01-01'+AND+requested_datetime+<+'2019-12-31'&filename=service&format=geojson&skipfields=cartodb_id") %>%
    mutate(year = substr(requested_datetime,1,4)) %>% 
    dplyr::select(Y = lat, X = lon) %>%
    na.omit() %>%
    st_as_sf(coords = c("X", "Y"), crs = 4326, agr = "constant") %>%
    st_transform(st_crs(fishnet)) %>%
    mutate(Legend = "Service")
## Reading layer `OGRGeoJSON' from data source `https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+public_cases_fc+WHERE+service_name+=+'Building+Dangerous'+AND+requested_datetime+>=+'2015-01-01'+AND+requested_datetime+<+'2019-12-31'&filename=service&format=geojson&skipfields=cartodb_id' using driver `GeoJSON'
## replacing null geometries with empty geometries
## Simple feature collection with 13754 features and 16 fields (with 2 geometries empty)
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -75.27112 ymin: 39.89559 xmax: -74.96588 ymax: 40.13355
## geographic CRS: WGS 84
# Vacant Lot Data
vacant<-
  st_read("https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+public_cases_fc+WHERE+service_name+=+'Vacant+House+or+Commercial'+AND+requested_datetime+>=+'2015-01-01'+AND+requested_datetime+<+'2019-12-31'&filename=vacant&format=geojson&skipfields=cartodb_id") %>%
    mutate(year = substr(requested_datetime,1,4)) %>% 
    dplyr::select(Y = lat, X = lon) %>%
    na.omit() %>%
    st_as_sf(coords = c("X", "Y"), crs = 4326, agr = "constant") %>%
    st_transform(st_crs(fishnet)) %>%
    mutate(Legend = "Vacant")
## Reading layer `OGRGeoJSON' from data source `https://phl.carto.com/api/v2/sql?q=SELECT+*+FROM+public_cases_fc+WHERE+service_name+=+'Vacant+House+or+Commercial'+AND+requested_datetime+>=+'2015-01-01'+AND+requested_datetime+<+'2019-12-31'&filename=vacant&format=geojson&skipfields=cartodb_id' using driver `GeoJSON'
## replacing null geometries with empty geometries
## Simple feature collection with 31810 features and 16 fields (with 16 geometries empty)
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -75.27292 ymin: 39.89314 xmax: -74.96259 ymax: 40.13561
## geographic CRS: WGS 84
grid.arrange(ncol = 3,
  ggplot() + geom_sf(data = boundary, fill = "grey40") +
      stat_density2d(data = data.frame(st_coordinates(sanitation)), 
                 aes(X, Y, fill = ..level.., alpha = ..level..),
                 size = 0.01, bins = 40, geom = 'polygon') +
      scale_fill_gradient(low = "#25CB10", high = "#FA7800", name = "Density") +
      scale_alpha(range = c(0.00, 0.35), guide = FALSE) +
      labs(title = "Density of Sanitation Violations") +
      mapTheme()+
      theme(legend.position = "none"),
  ggplot() + geom_sf(data = boundary, fill = "grey40") +
      stat_density2d(data = data.frame(st_coordinates(service)), 
                 aes(X, Y, fill = ..level.., alpha = ..level..),
                 size = 0.01, bins = 40, geom = 'polygon') +
      scale_fill_gradient(low = "#25CB10", high = "#FA7800", name = "Density") +
      scale_alpha(range = c(0.00, 0.35), guide = FALSE) +
      labs(title = "Density of Dangerous Building Reports") +
      mapTheme()+
      theme(legend.position = "none"),
  ggplot() + geom_sf(data = boundary, fill = "grey40") +
      stat_density2d(data = data.frame(st_coordinates(vacant)), 
                 aes(X, Y, fill = ..level.., alpha = ..level..),
                 size = 0.01, bins = 40, geom = 'polygon') +
      scale_fill_gradient(low = "#25CB10", high = "#FA7800", name = "Density") +
      scale_alpha(range = c(0.00, 0.35), guide = FALSE) +
      labs(title = "Density of Vacant Lots") +
      mapTheme()+
      theme(legend.position = "none"))

Finally, we gathered data from the U.S. Census Bureau 2018 5-year American Community Survey (ACS) at the census tract level on median household income, education level, and moving dates. We used these data to calculate the following variables for inclusion in the predictive model: Percent of Voting Age Population with the following Education levels: +No High School Degree +High School Degree +Some College Education +Associate’s Degree +Bachelor’s Degree +Graduate or Professional Degree Percent of Residents in Owner-Occupied Housing Percent of Residents in Renter-Occupied Housing Percent of Residents who Moved into Owner-Occupied Housing: +Before 2010 +2010 to 2014 +2015 to 2018 *Percent of Residents who Moved into Renter-Occupied Housing: +Before 2010 +2010 to 2014 +2015 to 2018

As described in further detail below, we used a selection of these variables within our predictive model as indicators of residential building permit locations.

census_api_key("337be6633f769979b1dfc56e5071279d780c2090", overwrite = TRUE)

dd18_5 <- load_variables(year = 2018, dataset = "acs5", cache = TRUE)

variables=c(Median_HHInc="B19013_001",
            VotingAgePop="B29002_001", #CITIZEN, VOTING-AGE POPULATION BY EDUCATIONAL ATTAINMENT: TOTAL
            HS_LessThan9Grade="B29002_002", #CITIZEN, VOTING-AGE POPULATION BY EDUCATIONAL ATTAINMENT: Less than 9th grade
            HS_9to12Grade="B29002_003", #CITIZEN, VOTING-AGE POPULATION BY EDUCATIONAL ATTAINMENT: 9th to 12th grade, no diploma
            HS="B29002_004", #CITIZEN, VOTING-AGE POPULATION BY EDUCATIONAL ATTAINMENT: High school graduate (includes equivalency)
            SomeCollege="B29002_005", #CITIZEN, VOTING-AGE POPULATION BY EDUCATIONAL ATTAINMENT: Some college, no degree
            Associate="B29002_006", #CITIZEN, VOTING-AGE POPULATION BY EDUCATIONAL ATTAINMENT: Associate's degree
            Bach="B29002_007", #CITIZEN, VOTING-AGE POPULATION BY EDUCATIONAL ATTAINMENT: Bachelor's degree
            GradProf="B29002_008", #CITIZEN, VOTING-AGE POPULATION BY EDUCATIONAL ATTAINMENT: Graduate or professional degree
            Pop_occHousing="B25026_001", #Total population in occupied housing units
            Pop_OwnOcc="B25026_002", #Total population in occupied housing units!!Owner occupied
            Pop_Own2017later="B25026_003", #Total population in occupied housing units!!Owner occupied!!Moved in 2017 or later
            Pop_Own2015to2016="B25026_004", #Total population in occupied housing units!!Owner occupied!!Moved in 2015 to 2016
            Pop_Own2010to2014="B25026_005", #Total population in occupied housing units!!Owner occupied!!Moved in 2010 to 2014
            Pop_Own2000to2009="B25026_006", #Total population in occupied housing units!!Owner occupied!!Moved in 2000 to 2009
            Pop_Own1990to1999="B25026_007", #Total population in occupied housing units!!Owner occupied!!Moved in 1990 to 1999
            Pop_Own1989earlier="B25026_008", #Total population in occupied housing units!!Owner occupied!!Moved in 1989 or earlier
            Pop_RentOcc="B25026_009", #Total population in occupied housing units!!Renter occupied
            Pop_Rent2017later="B25026_010", #Total population in occupied housing units!!Renter occupied!!Moved in 2017 or later
            Pop_Rent2015to2016="B25026_011", #Total population in occupied housing units!!Renter occupied!!Moved in 2015 to 2016
            Pop_Rent2010to2014="B25026_012", #Total population in occupied housing units!!Renter occupied!!Moved in 2010 to 2014
            Pop_Rent2000to2009="B25026_013", #Total population in occupied housing units!!Renter occupied!!Moved in 2000 to 2009
            Pop_Rent1990to1999="B25026_014", #Total population in occupied housing units!!Renter occupied!!Moved in 1990 to 1999
            Pop_Rent1989earlier="B25026_015") #Total population in occupied housing units!!Renter occupied!!Moved in 1989 or earlier

ACS_2018 <- get_acs(geography = "tract",
                           state = 42,
                           county= 101,
                           variables = variables,
                           year = 2018,
                           geometry=T)%>%
  st_transform('ESRI:102729')  %>% 
  dplyr::select(variable, estimate, GEOID) %>%
  spread(variable, estimate) %>%
  mutate(percent_NoHS= ifelse(VotingAgePop>0,((HS_LessThan9Grade+HS_9to12Grade) / VotingAgePop),0),
         percent_HS= ifelse(VotingAgePop>0, HS/ VotingAgePop,0),
         percent_SomeCollege= ifelse(VotingAgePop>0,SomeCollege / VotingAgePop,0),
         percent_assoc = ifelse(VotingAgePop>0,Associate / VotingAgePop,0),
         percent_bach = ifelse(VotingAgePop>0,Bach / VotingAgePop,0),
         percent_GradProf = ifelse(VotingAgePop>0,GradProf / VotingAgePop,0),
         percent_ownOcc= ifelse(Pop_occHousing>0,Pop_OwnOcc / Pop_occHousing,0),
         percent_rentOcc = ifelse(Pop_occHousing>0,Pop_RentOcc / Pop_occHousing,0),
         percent_Own_Pre2010 = ifelse(Pop_occHousing>0,
                                      ((Pop_Own1989earlier + Pop_Own1990to1999 + Pop_Own2000to2009) / Pop_occHousing),0),
         percent_Own_2010to2014 = ifelse(Pop_occHousing>0,Pop_Own2010to2014 / Pop_occHousing,0),
         percent_Own_2015to2018 = ifelse(Pop_occHousing>0,((Pop_Own2015to2016 + Pop_Own2017later) / Pop_occHousing),0),
         percent_Rent_Pre2010 = ifelse(Pop_occHousing>0,
                                       ((Pop_Rent1989earlier + Pop_Rent1990to1999 + Pop_Rent2000to2009) / Pop_occHousing),0),
         percent_Rent_2010to2014 = ifelse(Pop_occHousing>0,Pop_Rent2010to2014 / Pop_occHousing,0),
         percent_Rent_2015to2018 = ifelse(Pop_occHousing>0,
                                          ((Pop_Rent2015to2016 + Pop_Rent2017later) / Pop_occHousing),0))%>%
 dplyr::select(Median_HHInc, percent_NoHS, percent_HS, percent_SomeCollege, percent_assoc, percent_bach, percent_GradProf, 
         percent_ownOcc, percent_rentOcc, percent_Own_Pre2010, percent_Own_2010to2014, percent_Own_2015to2018, 
         percent_Rent_Pre2010, percent_Rent_2010to2014,   percent_Rent_2015to2018)%>%
  mutate(Median_HHInc = replace_na(Median_HHInc, 0),
         percent_NoHS = replace_na(percent_NoHS,0),
         percent_HS= replace_na(percent_HS,0),
         percent_SomeCollege= replace_na(percent_SomeCollege,0),
         percent_assoc= replace_na(percent_assoc,0),
         percent_bach= replace_na(percent_bach,0),
         percent_GradProf= replace_na(percent_GradProf,0),
         percent_ownOcc= replace_na(percent_ownOcc,0),
         percent_rentOcc= replace_na(percent_rentOcc,0),
         percent_Own_Pre2010= replace_na(percent_Own_Pre2010,0),
         percent_Own_2010to2014= replace_na(percent_Own_2010to2014,0),
         percent_Own_2015to2018= replace_na(percent_Own_2015to2018,0),
         percent_Rent_Pre2010= replace_na(percent_Rent_Pre2010,0),
         percent_Rent_2010to2014= replace_na(percent_Rent_2010to2014,0),
         percent_Rent_2015to2018= replace_na(percent_Rent_2015to2018,0))
## 
  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |=                                                                     |   1%
  |                                                                            
  |=                                                                     |   2%
  |                                                                            
  |==                                                                    |   2%
  |                                                                            
  |==                                                                    |   3%
  |                                                                            
  |===                                                                   |   4%
  |                                                                            
  |====                                                                  |   5%
  |                                                                            
  |====                                                                  |   6%
  |                                                                            
  |=====                                                                 |   7%
  |                                                                            
  |======                                                                |   8%
  |                                                                            
  |=======                                                               |  10%
  |                                                                            
  |=======                                                               |  11%
  |                                                                            
  |========                                                              |  11%
  |                                                                            
  |=========                                                             |  12%
  |                                                                            
  |=========                                                             |  13%
  |                                                                            
  |==========                                                            |  14%
  |                                                                            
  |==========                                                            |  15%
  |                                                                            
  |===========                                                           |  15%
  |                                                                            
  |============                                                          |  17%
  |                                                                            
  |=============                                                         |  18%
  |                                                                            
  |=============                                                         |  19%
  |                                                                            
  |==============                                                        |  20%
  |                                                                            
  |===============                                                       |  21%
  |                                                                            
  |================                                                      |  22%
  |                                                                            
  |================                                                      |  23%
  |                                                                            
  |=================                                                     |  24%
  |                                                                            
  |==================                                                    |  25%
  |                                                                            
  |==================                                                    |  26%
  |                                                                            
  |===================                                                   |  27%
  |                                                                            
  |===================                                                   |  28%
  |                                                                            
  |====================                                                  |  28%
  |                                                                            
  |=====================                                                 |  29%
  |                                                                            
  |=====================                                                 |  30%
  |                                                                            
  |======================                                                |  31%
  |                                                                            
  |======================                                                |  32%
  |                                                                            
  |=======================                                               |  33%
  |                                                                            
  |========================                                              |  34%
  |                                                                            
  |=========================                                             |  35%
  |                                                                            
  |=========================                                             |  36%
  |                                                                            
  |==========================                                            |  37%
  |                                                                            
  |===========================                                           |  38%
  |                                                                            
  |============================                                          |  39%
  |                                                                            
  |============================                                          |  41%
  |                                                                            
  |=============================                                         |  41%
  |                                                                            
  |==============================                                        |  42%
  |                                                                            
  |==============================                                        |  43%
  |                                                                            
  |===============================                                       |  44%
  |                                                                            
  |===============================                                       |  45%
  |                                                                            
  |================================                                      |  45%
  |                                                                            
  |=================================                                     |  46%
  |                                                                            
  |=================================                                     |  47%
  |                                                                            
  |==================================                                    |  48%
  |                                                                            
  |==================================                                    |  49%
  |                                                                            
  |===================================                                   |  50%
  |                                                                            
  |====================================                                  |  51%
  |                                                                            
  |=====================================                                 |  52%
  |                                                                            
  |=====================================                                 |  53%
  |                                                                            
  |======================================                                |  54%
  |                                                                            
  |======================================                                |  55%
  |                                                                            
  |=======================================                               |  56%
  |                                                                            
  |========================================                              |  57%
  |                                                                            
  |========================================                              |  58%
  |                                                                            
  |=========================================                             |  58%
  |                                                                            
  |=========================================                             |  59%
  |                                                                            
  |==========================================                            |  60%
  |                                                                            
  |===========================================                           |  61%
  |                                                                            
  |===========================================                           |  62%
  |                                                                            
  |============================================                          |  62%
  |                                                                            
  |============================================                          |  64%
  |                                                                            
  |=============================================                         |  64%
  |                                                                            
  |==============================================                        |  65%
  |                                                                            
  |==============================================                        |  66%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |===============================================                       |  68%
  |                                                                            
  |================================================                      |  68%
  |                                                                            
  |=================================================                     |  69%
  |                                                                            
  |=================================================                     |  70%
  |                                                                            
  |==================================================                    |  71%
  |                                                                            
  |==================================================                    |  72%
  |                                                                            
  |===================================================                   |  73%
  |                                                                            
  |====================================================                  |  74%
  |                                                                            
  |====================================================                  |  75%
  |                                                                            
  |=====================================================                 |  75%
  |                                                                            
  |=====================================================                 |  76%
  |                                                                            
  |======================================================                |  77%
  |                                                                            
  |=======================================================               |  78%
  |                                                                            
  |=======================================================               |  79%
  |                                                                            
  |========================================================              |  80%
  |                                                                            
  |========================================================              |  81%
  |                                                                            
  |=========================================================             |  81%
  |                                                                            
  |==========================================================            |  82%
  |                                                                            
  |==========================================================            |  83%
  |                                                                            
  |===========================================================           |  84%
  |                                                                            
  |===========================================================           |  85%
  |                                                                            
  |============================================================          |  85%
  |                                                                            
  |=============================================================         |  87%
  |                                                                            
  |=============================================================         |  88%
  |                                                                            
  |==============================================================        |  88%
  |                                                                            
  |==============================================================        |  89%
  |                                                                            
  |===============================================================       |  90%
  |                                                                            
  |================================================================      |  91%
  |                                                                            
  |================================================================      |  92%
  |                                                                            
  |=================================================================     |  92%
  |                                                                            
  |=================================================================     |  93%
  |                                                                            
  |==================================================================    |  94%
  |                                                                            
  |===================================================================   |  95%
  |                                                                            
  |===================================================================   |  96%
  |                                                                            
  |====================================================================  |  97%
  |                                                                            
  |====================================================================  |  98%
  |                                                                            
  |===================================================================== |  98%
  |                                                                            
  |======================================================================|  99%
  |                                                                            
  |======================================================================| 100%

The figures below show the distribution of residents in owner-occupied housing who moved in before 2010 (left), and between 2015 and 2018 (right). From these maps we can see that some locations have a greater percentage of new homeowners (yellow areas on the map at right), including the Point Breeze and Northern Liberties Neighborhoods.

ACS_2018_plot<-
  ACS_2018%>%
  mutate(percent_Own_Pre2010_per=percent_Own_Pre2010*100)%>%
  mutate(percent_Own_2015to2018_per=percent_Own_2015to2018*100)%>%
  mutate(percent_Rent_2015to2018_per=percent_Rent_2015to2018*100)

grid.arrange(ncol=2,
ggplot()+
  geom_sf(data=ACS_2018_plot, aes(fill=q5(percent_Own_Pre2010_per)))+
  scale_fill_viridis(discrete = TRUE,
                    labels = qBr(ACS_2018_plot, "percent_Own_Pre2010_per"),
                    name = "Owned Pre-2010\n(Quintile Breaks)") +
  labs(title = "Percentage of Residents in Owner-Occupied Housing: \nMoved in Before 2010") +
  mapTheme(),
ggplot()+
  geom_sf(data=ACS_2018_plot, aes(fill=q5(percent_Own_2015to2018_per)))+
  scale_fill_viridis(discrete = TRUE,
                    labels = qBr(ACS_2018_plot, "percent_Own_2015to2018_per"),
                    name = "Quintile Breaks") +
  labs(title = "Percentage of Residents in Owner-Occupied Housing: \nMoved in Between 2015 and 2018") +
  mapTheme())

Data Wrangling

After collecting the variety of data described above to serve as indicators of residential permits, we aggregated all data to our previously created fishnet. For point data (e.g., sanitation violations, vacant lot locations), we count the number of incidents within each grid cell. For census data (e.g., median household income), we join the census data values from the census tract where the centroid of each grid cell is located.

#put other data into fishnet. 
vars_net <- 
  rbind(sanitation, service, vacant) %>%
  st_join(., fishnet, join=st_within) %>% #if point is within this polygon, assign the polygon id to this point. then get it into the unit of grid polygons
  st_drop_geometry() %>%
  group_by(uniqueID, Legend) %>% #group by unique id and the type of variable, in this case just one cars
  summarize(count = n()) %>% #counting each point per grid cell
  full_join(fishnet, by = "uniqueID") %>%
  spread(Legend, count, fill=0) %>%
  st_sf() %>%
  dplyr::select(-`<NA>`) %>%
  na.omit() %>%
  ungroup()
vars_net<-
  vars_net%>%
  st_centroid()%>%
  st_join(ACS_2018)%>%
  na.omit()

Spatial processes

As we attempt to predict construction permits across space, it is important to account for the spatial process involved in the clustering of construction permits. In this section we will explain the features we create as a means of accounting for spatial clustering.

Nearest Neighbor Prediction Factors by Fishnet

Next we create average nearest neighbor features for each point-levek risk factor (sanitation reports, service requests, and vacant lots) by converting the grid cells to centroid points and then measuring the distance to 3 risk factor points. This better accounts for the relative distance to our point risk factors compared to the alternative of simply summing the factors by grid cell.

nn_function <- function(measureFrom,measureTo,k) {
  measureFrom_Matrix <-
    as.matrix(measureFrom)
  measureTo_Matrix <-
    as.matrix(measureTo)
  nn <-   
    get.knnx(measureTo, measureFrom, k)$nn.dist
    output <-
      as.data.frame(nn) %>%
      rownames_to_column(var = "thisPoint") %>%
      gather(points, point_distance, V1:ncol(.)) %>%
      arrange(as.numeric(thisPoint)) %>%
      group_by(thisPoint) %>%
      summarize(pointDistance = mean(point_distance)) %>%
      arrange(as.numeric(thisPoint)) %>% 
      dplyr::select(-thisPoint) %>%
      pull()
  
  return(output)  
}
st_c <- st_coordinates
st_coid <- st_centroid

vars_net <-
  vars_net %>%
    mutate(
      Sanitation.nn =
        nn_function(st_c(st_coid(vars_net)), st_c(sanitation),3),
      Service.nn =
        nn_function(st_c(st_coid(vars_net)), st_c(service),3),
      Vacant.nn =
        nn_function(st_c(st_coid(vars_net)), st_c(vacant),3))

Creating Distance to Center City as a variable

We next calculate the distance to downtown Philadelphia (Center City) and add the risk factor to the fishnet. We believe this serves to reflect the effect of proximity to the central business and growth hub of the city.

ccPoint <-
  filter(nhood, name == "CENTER_CITY") %>%
  st_centroid()

vars_net$ccDistance =
  st_distance(st_centroid(vars_net),ccPoint) %>%
  as.numeric() 

Variable Plots

The figures below depict a selection of risk factors mapped to the fishnet. The variety of spatial distributions across these maps indicate that the risk factors illustrate different spatial processes. For example, locations with high concentrations of residents with a Bachelor’s degree are concentrated in the Center City and Northwest Philadelphia areas, while distance to the nearest three sanitation violations are distributed roughly evenly across the city.

grid.arrange(ncol=3,
  ggplot()+
    geom_sf(data=vars_net, aes(color=Median_HHInc))+
    scale_color_viridis()+
    labs(title="Median Household Income")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=percent_HS))+
    scale_color_viridis()+
    labs(title="Percent of Voting-Age Population \nwithout a High School Degree")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=percent_bach))+
    scale_color_viridis()+
    labs(title="Percent of Voting-Age Population \nwith a Bachelors Degree")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=percent_ownOcc))+
    scale_color_viridis()+
    labs(title="Percent of the Population Living \nin Owner-Occupied Housing")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=percent_Own_Pre2010))+
    scale_color_viridis()+
    labs(title="Percent of the Population Living in \nOwner-Occupied Housing: Moved in Before 2010")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=percent_Own_2015to2018))+
    scale_color_viridis()+
    labs(title="Percent of the Population Living in \nOwner-Occupied Housing: Moved in Between 2015-2018")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=percent_Rent_Pre2010))+
    scale_color_viridis()+
    labs(title="Percent of the Population Living in \nRenter-Occupied Housing: Moved in Before 2010")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=percent_Own_2015to2018))+
    scale_color_viridis()+
    labs(title="Percent of the Population Living in \nRenter-Occupied Housing: Moved in Between 2015-2018")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=Sanitation.nn))+
    scale_color_viridis()+
    labs(title="Distance to Nearest 3 Saniation Violations")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=Service.nn))+
    scale_color_viridis()+
    labs(title="Distance to Nearest 3 Service Requests")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=Vacant.nn))+
    scale_color_viridis()+
    labs(title="Distance to Nearest 3 Vacant Lots")+
    mapTheme(),
  ggplot()+
    geom_sf(data=vars_net, aes(color=ccDistance))+
    scale_color_viridis()+
    labs(title="Distance to Center City")+
    mapTheme())

Create final net

Finally, we perform a join to combine the permit data with the risk factor data and join neighborhoods to the final net.

## important to drop the geometry from joining features
final_net <-
  left_join(permit_net, st_drop_geometry(vars_net), by="uniqueID") 
#polygon to polygon joins are hard. 

final_net <-
  st_centroid(final_net) %>% #take the centroid of the fishnet
    st_join(dplyr::select(nhood, name), by = "uniqueID") %>% #spatially join those withinthe nhood polygons nd polict districs. ie assign the neighborhood to the fishnet id for whichever nhood the fishnet centroid falls into
    #st_join(dplyr::select(policeDistricts, District), by = "uniqueID") %>%
      st_drop_geometry() %>%
      left_join(dplyr::select(final_net, geometry, uniqueID)) %>%  #get the fishnet back in to get the polygons. drop the geom to do the left join and then being it back in
      st_sf() %>%
  na.omit()

# for live demo
# mapview::mapview(final_net, zcol = "District")

Modeling Approach

We use a geospatial risk model where the dependent variable is new construction permits. We work to predict the risk of new construction permits in particular areas of the city.

Plots of Local Moran’s I for fishnet grid cells

The success of our model is dependent on its ability to account for spatial clustering at multiple scales. Here we use Local Moran’s I to explore the local spatial process. The null hypothesis is that the count of new construction permits is randomly distributed relative to its immediate neighbors.

We use a nearest neighbor weights matrix to relate a unit (here a fishnet grid) to its eight adjacent neighbors ( this is called a queen continuity).

## generates warnings from PROJ issues
## {spdep} to make polygon to neighborhoods... 
final_net.nb <- poly2nb(as_Spatial(final_net), queen=TRUE) #polygons into neighborhood which gives us list of weights for which neighbors it has. creting a netowkr graph of one grid to all others.
## ... and neighborhoods to list of weigths
final_net.weights <- nb2listw(final_net.nb, style="W", zero.policy=TRUE)

The inputs of the Local Moran test are the count of new construction permits and the spatial weights matrix. We combine the results of our Local Moran test with the final net and map a few useful test statistics - the Local Morans I value, the p-value, and significant hotspots. We determine the significant hotspots as grid cells that have higher local counts than could be expected under randomness – defined here as a p-value less than 0.00001. By using a smaller p-value to define a significant spot, we get a clear picture of a few intense new construction permit hotspots – notably in Center City and in northeast Philadelphia near the Fishtown neighborhood.

With the Local Moran’s I test, we reject the null hypothesis that the permit count at a given location is randomly distributed relative to it’s immediate neighbors. That is, we can test for (and control for) the spatial autocorrelation of the model errors at the local level.

final_net.localMorans <- 
  cbind(
    as.data.frame(localmoran(final_net$countpermits, final_net.weights)),
    as.data.frame(final_net)) %>% 
    st_sf() %>%
      dplyr::select(Permit_Count = countpermits, 
                    Local_Morans_I = Ii, 
                    P_Value = `Pr(z > 0)`) %>%
      mutate(Significant_Hotspots = ifelse(P_Value <= 0.00001, 1, 0)) %>%
      gather(Variable, Value, -geometry)
  
vars <- unique(final_net.localMorans$Variable)
varList <- list()

for(i in vars){
  varList[[i]] <- 
    ggplot() +
      geom_sf(data = filter(final_net.localMorans, Variable == i), 
              aes(fill = Value), colour=NA) +
      scale_fill_viridis(name="") +
      labs(title=i) +
      mapTheme() + theme(legend.position="bottom")}

do.call(grid.arrange,c(varList, ncol = 4, top = "Local Morans I statistics, Permit"))

Distance to Hot spot

We use this hotspot information to create a spatial feature as a means for controlling for this local spatial autocorrelation. Here we calculate the distance of each grid cell to the nearest significant hotspot as a variable “Distance to Hotspot”.

# generates warning from NN
# final_net <- final_net %>% 
#   mutate(abandoned.isSig = 
#            ifelse(local_morans[,5] <= 0.001, 1, 0)) %>% #how close each grid cell is to a sig hotspot
#   mutate(abandoned.isSig.dist = 
#            nn_function(st_c(st_coid(final_net)),
#                        st_c(st_coid(filter(final_net, abandoned.isSig == 1))),
#                        k = 1))

final_net <-
  final_net %>% 
  mutate(permit.isSig = 
           ifelse(localmoran(final_net$countpermits, 
                             final_net.weights)[,5] <= 0.0000001, 1, 0)) %>% #does this need to changed?
  mutate(permit.isSig.dist = 
           nn_function(st_coordinates(st_centroid(final_net)),
                       st_coordinates(st_centroid(
                         filter(final_net, permit.isSig == 1))), 1))

ggplot() +
      geom_sf(data = final_net, aes(fill=permit.isSig.dist), colour=NA) +
      scale_fill_viridis(name="NN Distance") +
      labs(title="Permit NN Distance") +
      mapTheme()

## What does k = 1 represent? the distance to my closest significant hot spot. Want the biggest number when we're close to a hot spot. Exposure to closest one.  Can we plot this?

Correlation Plot

From the correlation plot of our numerical variables, we see that this new Distnace to Hotspot variable is negatively correlated with the count of new construction permits. That is, as the distance to a significant hotspot increases, the count of permits decreases.

We also see a positive correlation between the percentage of the population with bachelors degrees and count of new construction permits. This is expected given what is known about the nature of new homeowners in changing neighborhoods, and supports our hypothesis about the potential for displacement given these new construction permits alongside higher education levels.

# correlation.long <-
#   st_drop_geometry(final_net) %>%
#     dplyr::select(-uniqueID, -cvID, -name,-ccDistance) %>%
#     gather(Variable, Value, -countpermits)

correlation.long <-
  st_drop_geometry(final_net) %>%
    dplyr::select(.,-Sanitation, -Vacant, -Service, -cvID, -percent_assoc,-percent_Own_2010to2014, -percent_Rent_2010to2014, -percent_NoHS, -percent_SomeCollege,-permit.isSig, -percent_GradProf, -percent_rentOcc, -ccDistance) %>%
    gather(Variable, Value, -countpermits)

# correlation.cor <-
#   correlation.long %>%
#     group_by(Variable) %>%
#     summarize(correlation = cor(Value, countpermits, use = "complete.obs"))
#     
# ggplot(correlation.long, aes(Value, countpermits)) +
#   geom_point(size = 0.1) +
#   geom_text(data = correlation.cor, aes(label = paste("r =", round(correlation, 2))),
#             x=-Inf, y=Inf) +
#   geom_smooth(method = "lm", se = FALSE, colour = "black") +
#   facet_wrap(~Variable, ncol = 2, scales = "free") +
#   labs(title = "Permit count as a function of risk factors") +
#   plotTheme()



regVars <- 
  #final_net %>%
  select_if(st_drop_geometry(final_net), is.numeric) %>%
  dplyr::select(.,-Sanitation, -Vacant, -Service, -cvID, -percent_assoc,-percent_Own_2010to2014, -percent_Rent_2010to2014, -percent_NoHS, -percent_SomeCollege,-permit.isSig, -percent_GradProf, -percent_rentOcc) %>%
  na.omit()

ggcorrplot(
  round(cor(regVars), 1), 
  p.mat = cor_pmat(regVars),
  colors = c("#25CB10", "white", "#FA7800"),
  type="lower",
  insig = "blank") +  
    labs(title = "Correlation across numeric variables")

# colNameTbl <-
# colnames(regVars)

Regression

Because the count of new construction permits in most grid cells will be quite low (if not zero), we use a linear Poisson regression to best account for the skewed dependent variable distribution.

We create two sets of independent variables – one including our newly created variables for distance to a significant theft hot spot and one with only risk factor variables – as a way to display the importance of generalizability in different spatial contexts, and how the hotspot variable improves the models generalizability.

reg.vars <- c("Sanitation.nn", "Service.nn", "Vacant.nn","ccDistance", "Median_HHInc", "percent_HS", "percent_bach","percent_ownOcc", "percent_Own_Pre2010", "percent_Own_2015to2018","percent_Rent_Pre2010", "percent_Rent_2015to2018")

reg.ss.vars <- c("Sanitation.nn", "Service.nn", "Vacant.nn","ccDistance", "Median_HHInc", "percent_HS", "percent_bach","percent_ownOcc", "percent_Own_Pre2010", "percent_Own_2015to2018","percent_Rent_Pre2010", "percent_Rent_2015to2018","permit.isSig", "permit.isSig.dist")

We create two kinds of folds of our data in order to cross-validate - random folds and neighborhood folds.

The LOGO-CV cross validation method iteratively excludes one fold at a time from the model training, and then predicts on that excluded fold. For the neighborhood folds, we assign each grid cell not in that neighborhood to the training set and then test on each grid cell in that neighborhood. This process is repeated until each neighborhood has acted as the hold out. In this way, we ensure that the model training is not affected by the random inclusion or exclusion of an outlier in the training set. However, using neighborhood as the holdout criteria implies an assumption of similarity across neighborhoods in the city, as will be discussed.

crossValidate <- function(dataset, id, dependentVariable, indVariables) {

allPredictions <- data.frame()
cvID_list <- unique(dataset[[id]])

#create test and train folds 
for (i in cvID_list) {

  thisFold <- i
  cat("This hold out fold is", thisFold, "\n")

  fold.train <- filter(dataset, dataset[[id]] != thisFold) %>% as.data.frame() %>% 
                dplyr::select(id, geometry, indVariables, dependentVariable)
  fold.test  <- filter(dataset, dataset[[id]] == thisFold) %>% as.data.frame() %>% 
                dplyr::select(id, geometry, indVariables, dependentVariable)
  
# regress count of permits on the training fold  
  regression <-
    glm(countpermits ~ ., family = "poisson",
      data = fold.train %>% 
      dplyr::select(-geometry, -id))
  
#use regression to predict count of permits
  thisPrediction <- 
    mutate(fold.test, Prediction = predict(regression, fold.test, type = "response"))
    
  allPredictions <-
    rbind(allPredictions, thisPrediction)
    
  }
  return(st_sf(allPredictions))
}

Cross validation methods

We cross validate four different regressions. Two perform random k-fold cross validation - one using the simple risk factors and one adding the distance to significant hotspots variable. Two others perform LOGO-CV based on the neighborhood name - again, one using the simple risk factors and one adding the distance to significant hotspots variable.

reg.cv <- crossValidate(
  dataset = final_net,
  id = "cvID",
  dependentVariable = "countpermits",
  indVariables = reg.vars) %>%
    dplyr::select(cvID = cvID, countpermits, Prediction, geometry)

reg.ss.cv <- crossValidate(
  dataset = final_net,
  id = "cvID",
  dependentVariable = "countpermits",
  indVariables = reg.ss.vars) %>%
    dplyr::select(cvID = cvID, countpermits, Prediction, geometry)

reg.spatialCV <- crossValidate(
  dataset = final_net,
  id = "name",
  dependentVariable = "countpermits",
  indVariables = reg.vars) %>%
    dplyr::select(cvID = name, countpermits, Prediction, geometry)

reg.ss.spatialCV <- crossValidate(
  dataset = final_net,
  id = "name",
  dependentVariable = "countpermits",
  indVariables = reg.ss.vars) %>%
    dplyr::select(cvID = name, countpermits, Prediction, geometry)

Each regression error is created by taking the difference between the predicted count of new construction permits and the observed count of construction permits.

reg.summary <- 
  rbind(
    mutate(reg.cv,           Error = Prediction - countpermits,
                             Regression = "Random k-fold CV: Just Risk Factors"),
                             
    mutate(reg.ss.cv,        Error = Prediction - countpermits,
                             Regression = "Random k-fold CV: Spatial Process"),
    
    mutate(reg.spatialCV,    Error = Prediction - countpermits,
                             Regression = "Spatial LOGO-CV: Just Risk Factors"),
                             
    mutate(reg.ss.spatialCV, Error = Prediction - countpermits,
                             Regression = "Spatial LOGO-CV: Spatial Process")) %>%
    st_sf() 

We visualize the relative performance of each regression by examining the mean average error (MAE) distributions for each fold. The MAE is the absolute value of the mean error.

error_by_reg_and_fold <- 
  reg.summary %>%
    group_by(Regression, cvID) %>% 
    summarize(Mean_Error = mean(Prediction - countpermits, na.rm = T),
              MAE = mean(abs(Mean_Error), na.rm = T),
              SD_MAE = mean(abs(Mean_Error), na.rm = T)) %>%
  ungroup()

error_by_reg_and_fold %>%
  ggplot(aes(MAE)) + 
    geom_histogram(bins = 30, colour="black", fill = "#FDE725FF") +
    facet_wrap(~Regression) +  
    geom_vline(xintercept = 0) + scale_x_continuous(breaks = seq(0, 8, by = 1)) + 
    labs(title="Distribution of MAE", subtitle = "k-fold cross validation vs. LOGO-CV",
         x="Mean Absolute Error", y="Count") 

We see that the regressions that included the Distance to Hotspot variables (on the right had side of the distribution matrix) had more clustered errors. That is, there were fewer errors of high magnitudes. LOGO-CV assumes that the spatial processes of all other neighborhoods apply to the one hold out, when in actuality that is likely not the case. By using Distance to Hotspot to account for local variability, we improve the models predictive capability particularly in hotspots with high counts of permits. The maps below articulate the reduction in MEA across space that comes from including the spatial process variable as opposed to only risk factors.

error_by_reg_and_fold %>%
  filter(str_detect(Regression, "LOGO")) %>%
  ggplot() +
    geom_sf(aes(fill = MAE)) +
    facet_wrap(~Regression) +
    scale_fill_viridis() +
    labs(title = "Permit errors by LOGO-CV Regression") +
    mapTheme() + theme(legend.position="bottom")

The table of mean MAE and standard deviation of MAE below shows that the random k-fold with spatial processes has the smallest error. The spatial LOGO likely has a higher error because of its assumption that experiences in all other neighborhoods can apply accurately to one.

st_drop_geometry(error_by_reg_and_fold) %>%
  group_by(Regression) %>% 
    summarize(Mean_MAE = round(mean(MAE), 2),
              SD_MAE = round(sd(MAE), 2)) %>%
  kable(caption = "MAE by regression") %>%
    kable_styling("striped", full_width = F) %>%
    row_spec(2, color = "black", background = "#FDE725FF") %>%
    row_spec(4, color = "black", background = "#FDE725FF") 
MAE by regression
Regression Mean_MAE SD_MAE
Random k-fold CV: Just Risk Factors 0.43 0.43
Random k-fold CV: Spatial Process 0.29 0.34
Spatial LOGO-CV: Just Risk Factors 1.25 2.50
Spatial LOGO-CV: Spatial Process 0.39 0.89
mean(final_net$countpermits)
## [1] 0.5698201

These results are further visualized by examining the MEA by decile of permit counts. The use of the hotspot variable greatly reduced the error in the areas with the highest density of permits.

Still, all models under predicts in high density areas and over predict in low density aras. We could improve this by further engineering spatial features to minimize this discrepency.

st_drop_geometry(reg.summary) %>%
  group_by(Regression) %>%
    mutate(Permit_Decile = ntile(countpermits, 10)) %>%
  group_by(Regression, Permit_Decile) %>%
    summarize(meanObserved = mean(countpermits, na.rm=T),
              meanPrediction = mean(Prediction, na.rm=T)) %>%
    gather(Variable, Value, -Regression, -Permit_Decile) %>%          
    ggplot(aes(Permit_Decile, Value, shape = Variable)) +
      geom_point(size = 2) + geom_path(aes(group = Permit_Decile), colour = "black") +
      scale_shape_manual(values = c(2, 17)) +
      facet_wrap(~Regression) + xlim(0,10) +
      labs(title = "Predicted and observed permit by observed permit decile")

WE CAN TAKE THIS OUT MAYBE, THE SPATIAL PROCESS DOESN’T REDUCE ERRORS AT ALL BETWEEN RACE. COULD BE A DISCUSSION ABOUT HOW AREAS WITH HIGHER NON WHITE POPULATIONS ARE SEEING HIGHER PERMIT COUNTS AND DISPLACEMENT?

Another important level of generalizability is across social dimensions such as race and income. Below we see a map of the racial context of Philadelphia looking at the distinction between majority white and non white census tracts.

tracts18 <- 
  get_acs(geography = "tract", variables = c("B01001_001E","B01001A_001E"), 
          year = 2018, state=42, county=101, geometry=T) %>%
  st_transform('ESRI:102729')  %>% 
  dplyr::select(variable, estimate, GEOID) %>%
  spread(variable, estimate) %>%
  rename(TotalPop = B01001_001,
         NumberWhites = B01001A_001) %>%
  mutate(percentWhite = NumberWhites / TotalPop,
         raceContext = ifelse(percentWhite > .5, "Majority_White", "Majority_Non_White")) %>%
  .[nhood,]
## Getting data from the 2014-2018 5-year ACS
## Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
   ggplot()+
    geom_sf(data=tracts18, aes(fill=raceContext))+
    #scale_color_viridis()+
    labs(title="Race Context in Philadelphia")+
    mapTheme()

reg.summary %>% 
  filter(str_detect(Regression, "LOGO")) %>%
    st_centroid() %>%
    st_join(tracts18) %>%
    na.omit() %>%
      st_drop_geometry() %>%
      group_by(Regression, raceContext) %>%
      summarize(mean.Error = mean(Error, na.rm = T)) %>%
      spread(raceContext, mean.Error) %>%
      kable(caption = "Mean Error by neighborhood racial context") %>%
        kable_styling("striped", full_width = F) 
## Warning in st_centroid.sf(.): st_centroid assumes attributes are constant over
## geometries of x
## `summarise()` regrouping output by 'Regression' (override with `.groups` argument)
Mean Error by neighborhood racial context
Regression Majority_Non_White Majority_White
Spatial LOGO-CV: Just Risk Factors 0.0612936 0.0876799
Spatial LOGO-CV: Spatial Process -0.0214445 0.0421587

Risk Map and Results

This model is able to predict the relative risk of new construction permits, and thus risk of displacement, across Philadelphia. In the map below we see the highest risk areas in dark purple, most often surrounded by areas in the second highest risk category.

permit_risk_sf <-
  filter(reg.summary, Regression == "Spatial LOGO-CV: Spatial Process") %>%
  mutate(label = "Risk Predictions",
         Risk_Category = ntile(Prediction, 100),
         Risk_Category = case_when(
           Risk_Category > 99 ~ "> 99%",
           Risk_Category >= 98 & Risk_Category <= 99 ~ "98% to 99%",
           Risk_Category >= 90 & Risk_Category <= 97 ~ "90% to 97%",
           Risk_Category >= 70 & Risk_Category <= 89 ~ "70% to 89%",
           Risk_Category >= 50 & Risk_Category <= 69 ~ "50% to 69%",
           Risk_Category >= 30 & Risk_Category <= 49 ~ "30% to 49%",
           Risk_Category >= 1 & Risk_Category <= 29 ~ "1% to 29%")) 

permit_risk_sf %>%
  na.omit() %>%
  gather(Variable, Value, -label, -Risk_Category, -geometry) %>%
  ggplot() +
    geom_sf(aes(fill = Risk_Category), colour = NA) +
    geom_sf(data=nhood, fill = "transparent") +
    #geom_sf(data = sample_n(cvID, 300), size = .5, colour = "black") +
    #facet_wrap(~label, ) +
    scale_fill_viridis(discrete = TRUE) +
    labs(title="Risk Predictions",
         subtitle="New Construction Permit Predictions") +
    mapTheme()

The bar chart below displays the top five neighborhoods at risk of new construction permits and risk of displacemnet. Based on the map of risk, it is not surprising that three of these top five neighborhoods are located near one another in north Philadelphia (Fishtown, West Kensington, and East Kensington), with the remaining two also in close proximity to each other (Grad Hosptial and Point Breeze). These results indicate that improvements to the spatial process in our model are incredibly important, as the risk of new construction permits is very much not randomly distributed across space.

# %>%
#   cbind(
#     aggregate(
#       dplyr::select(theft18) %>% mutate(theftCount = 1), ., sum) %>%
#       mutate(theftCount = replace_na(theftCount, 0))) %>%
#   dplyr::select(label,Risk_Category, theftCount)

# permit_risk_sf_nh_count <-
#   permit_risk_sf %>%
#   dplyr::select(cvID, countpermits, Risk_Category) %>%
#   st_drop_geometry() %>%
#   group_by(cvID) %>%
#   summarise(Predicted_Permits=sum(countpermits)) %>%
#   dplyr::filter(., Predicted_Permits>180) %>%
#   arrange(.,-Predicted_Permits) %>%
#   rename(Neighborhood = cvID) %>%
#   ggplot() +
#   geom_bar(aes(x=reorder(Neighborhood, -Predicted_Permits), Predicted_Permits), fill = "#1f2a59", stat = "identity") +
#   labs(x = "Neighborhood",
#        title = "Top 10 Neighborhoods by Predicted Permits") +
#   #scale_y_continuous(limits = c(0,100)) +
#   plotTheme()

 highest_risk_nhoods <-
  permit_risk_sf %>%
  dplyr::select(cvID, Risk_Category, countpermits) %>%
  dplyr::filter(., Risk_Category =="> 99%") %>%
  st_drop_geometry() %>%
  group_by(cvID) %>%
  summarise(Predicted_Permits=sum(countpermits)) %>%
  dplyr::filter(., Predicted_Permits>52) %>%
  arrange(.,-Predicted_Permits) %>%
  rename(Neighborhood = cvID)

  ggplot(highest_risk_nhoods) +
  geom_bar(aes(x=reorder(Neighborhood, -Predicted_Permits), Predicted_Permits), fill = "#1f2a59", stat = "identity") +
  labs(x = "Neighborhood",
       title = "Neighborhoods with Predicted Permit Risk greater than 99%") +
  #scale_y_continuous(limits = c(0,100)) +
  plotTheme()

Community Partners

As part of our analysis, we collected data on Registered Community Organizations (RCOs) in Philadelphia, including the RCO boundaries and primary contact information. We have matched the RCOs with Philadelphia neighborhoods and provided a table of each RCO that makes the contact information readily available. We intend this information to complement the results from our predictive analysis: as neighborhoods are identified as at risk to displacement, staff from the City may wish to contact trusted organizations in that location in order to begin a process to support longtime residents.

nhood_name<- nhood%>% dplyr::select(name)%>%
  rename(Neighborhood=name)
  
rcos_final<-
  st_centroid(rcos)%>%
  st_join(nhood_name)%>%
  dplyr::select(ORGANIZATION_NAME, ORGANIZATION_ADDRESS, PRIMARY_NAME, PRIMARY_ADDRESS, PRIMARY_EMAIL, PRIMARY_PHONE, Neighborhood)%>%
  arrange(Neighborhood)
## Warning in st_centroid.sf(rcos): st_centroid assumes attributes are constant
## over geometries of x
rcos_final<-rcos_final[c(7, 1, 2, 3, 4, 5, 6, 8)]

st_drop_geometry(rcos_final) %>%
  kable(caption = "Registered Community Organizations by Neighborhood")%>%
    kable_styling("striped", full_width = F)%>%
  scroll_box(height = "300px")
Registered Community Organizations by Neighborhood
Neighborhood ORGANIZATION_NAME ORGANIZATION_ADDRESS PRIMARY_NAME PRIMARY_ADDRESS PRIMARY_EMAIL PRIMARY_PHONE
ALLEGHENY_WEST RAH Civic Association 3106 N. Spangler Street, 19132 Rosalie Cooper 3106 N Spangler Street, 19132 (215)696-4832
ALLEGHENY_WEST Swampoodle Neighborhood Parcels Association 1846 N 28th Street 19121 Adrienne Fernandez 1846 N 28th Street 19121 2152796456
ALLEGHENY_WEST Community Action Group 3149 N Pennock St, Philadelphia PA 19132 Denise Whittaker 3149 N Pennock St, Philadelphia PA 19132 2153602813
BELLA_VISTA Bella Vista Neighbors Association PO Box 63955, 19147 Dennis Hallda P.O. Box 63955 Philadelphia, PA 19147 2156270057
BELMONT Belmont Alliance Civic Association CDC 871 North Holly Street Floor #2, 19104 Bettye Ferguson 871 North Holly Street Floor #1, 19104 2678822596
BELMONT Holly Street Neighbors CDC 737 N. Holly Street Philadelphia, PA 19104 Alverita Spain 737 N. Holly Street Philadelphia, PA 19104 2152395305
BELMONT West Belmont Civic Association 4311 Otter Street Philadelphia, PA 19104 David Pickett 4311 Otter Street Philadelphia, PA 19104 2158735722
BELMONT Parkside Area Community Association 4032 Parkside Avenue #2 Philadelphia , PA 19104 United States Philadelphia, PA 19131 Netrisa Dockery 4032 Parkside Avenue #2 Philadelphia, PA 19104 United States 2676795812
BELMONT People’s Emergency Center Community Development Corporation 325 N 39th St, 19104 James Wright 3939 Warren Street 2nd floor Philadelphia, PA 19104 2677775853
BREWERYTOWN 29th Democratic Ward 1233 north 29th street Philadelphia , Pennsylvania 19121 Clyde Sanders 2332 West Nicholas street Philadelphia , Pennsylvania 19121 2157711819
BREWERYTOWN Celestial Community Development Corporation 2800 W. Thompson Street, 19121 Michelle Brownlee 2800 W. Thompson Street Philadelphia, PA 19121 United States 2155008013
BREWERYTOWN Brewerytown Sharswood Community Civic Association 3000 “D” W Master Street 19121 Warren McMichael 2514 W Stewart Philadelphia, PA 19121 Philadelphia, PA 19121 2157635507
BRIDESBURG Bridesburg Community Action Alliance 4413 Garden Street Yvonne Stephens 4413 Garden Street 2159150078
BRIDESBURG Bridesburg Civic Association 2824 Plum Street, 19137 Harry Enggasser 2824 Plum Street, 19137 2672533189
BUSTLETON Greater Bustleton Civic League 9823 Verree Rd Philadelphia Philadelphia, PA 19115 Jack O’Hara 9823 Verree Rd Philadelphia, PA 19115 2156739519
BYBERRY Arbours at Eagle Pointe Community Association 2675 Veronica Lane Phildelphia, PA 19116 Robert Purvis 15108 Dahlia Drive, 19116 2158802044
CALLOWHILL Callowhill Neighborhood Association 1115 Hamilton St., 19123 Sarah McEneaney 1115 Hamilton St., 19123 2156204647
CARROLL_PARK Parkside Association Parkside Evans Recreation Center, 53rd & Parkside Avenue 19131 Lucinda Hudson 1719 N. 52nd Street Suite “G” 19131 2158699752
CARROLL_PARK Concerned Citizens Revitalization 6010 Lansdowne Avenue, Philadelphia, PA 19131 Gertrude Weaver 6010 Lansdowne Avenue, Philadelphia, PA 19131 2158779411
CARROLL_PARK Hestonville Civic Association 1623 55th Street, 19131 Sheila Buchanan 1623 North 55th Street, 19131 2675047800
CARROLL_PARK Cathedral Park Community Development Association P.O. Box 11796, Philadelphia, PA 19101 Mark Frog Harris P.O. Box 11796, Philadelphia, PA 19101 2156855340
CEDAR_PARK Cedar Park Neighbors 4740 Baltimore Ave Philadelphia, PA 19143 Shawn Markovich C/O Cedar Park Neighbors 4740 Baltimore Ave Philadelphia, PA 19143 2672258283
CEDAR_PARK Cedar Point Park Neighborhood Association c/o 4614 Cedar Avenue Philadelphia, PA 19143 Theresa Sims C/o 4614 Cedar Avenue Philadelphia, PA 19143 2152228020
CEDAR_PARK 46th Ward Democratic Committee 4619 Chester Avenue, Philadelphia, PA 19143 Catherine Blunt 4918 Walton Avenue, Philadelphia, PA 19143 2157471285
CEDAR_PARK Kingsessing Spirit 5426 Baltimore Avenue
Philadelphia, PA 10143
Conor McAleer 5426 Baltimore Ave, Philadelphia, PA 191430 6102124853
CEDAR_PARK 46th Republican Ward 4256 Regent Square, Philadelphia PA 19104 Denise Furey 4256 Regent Square, Philadelphia PA 19104 2152664121
CEDARBROOK 50th Democratic Ward 7626 Forrest Avenue Philadelphia, PA 19150 Gerry Sizemore PO Box 27476, Philadelphia, 19118 (215)549-7374
CHESTNUT_HILL 9th Republican Ward 22 W. Southampton Ave Philadelphia, PA 19118 Christopher Lins 22 W. Southampton Ave, Philadelphia Pa 19118 2152055776
CHESTNUT_HILL Chestnut Hill Conservancy 8708 Germantown Ave, 19118 Patricia Cove 8504 Germantown Ave Philadelphia, PA 19118 2152483219
CHESTNUT_HILL Friends of the Wissahickon 40 West Evergreen Avenue Suite 108 Philadelphia, PA 19118 Ruffian Tittman 40 West Evergreen Avenue Suite 108 Philadelphia, PA 19118 2152470417
CHESTNUT_HILL Chestnut Hill Community Association 8434 Germantown Avenue, 19118 Anne McNiff 8434 Germantown Avenue, 2nd Floor, 19118 2152488811
CHINATOWN Asian American Federation of the United States 1118 Buttonwood Street, Unit A Philadelphia, PA 19123 Mahn S. Park 1735 Stanwood Street, 19152 2159090936
CHINATOWN Philadelphia Chinatown Development Corporation 301-305 N. 9th St., Phila, PA 19107 Yue Wu 301-305 N. 9th St., Phila, PA 19107 2159222156
COBBS_CREEK 60th Republican Ward 4440 Ludlow Street Philadelphia, PA 19104 Ross Wolfe 4440 Ludlow Street Philadelphia, PA 19104 6107451626
COBBS_CREEK 3rd Ward Executive Committee P.O Box 6898, Philadelphia, PA 19132 Ronald G. Waters 108 South 61 Street, Philadelphia, PA 19139 2672466185
COBBS_CREEK Cobbs Creek Neighbors Association 5800 Cobbs Creek Parkway Blanche A. Nixon/Cobbs Creek Library, 19143 Larissa Mogano 5234 Webster St., 19143 2673429919
COBBS_CREEK 3rd Ward Republicans 5813 Catharine Street, Philadelphia, PA 19143 Emma Earle 5813 Catharine Street, Philadelphia, PA 19143 2673485049
COBBS_CREEK ACHIEVEability 59 N . 60th Street Philadelphia, PA 19139 Tempest Carter 59 N. 60th Street Philadelphia, PA 19139 2154215166
COBBS_CREEK Progressive Communities CDC 413 South 60th Street Philadelphia, PA 19143 Tarik Ferron c/o Maskid Mujahideen 413 South 60th Street Philadelphia, PA 19143 2155121866
DEARNLEY_PARK Dearnley Park Civic Association 7511 Silverwood Street, Philadelphia PA 19128 Raymond Smith 7511 Silverwood Street, Philadelphia, PA 19128 2153176481
DICKINSON_NARROWS Dickinson Square West Civic Association PO Box 63891, 19147-7891 Larry Reigel PO Box 63891, 19147 (508)639-0939
EAST_FALLS East Falls Community Council PO Box 12672, 19129 Hilary Langer P.O. Box 12672 c/o EFCC Philadelphia, PA 19129 United States 2156034279
EAST_FALLS East Falls Forward 3721 Midvale Avenue Philadelphia, PA 19129 Steve Fillmore 4000 Gypsy Ln #334 Philadelphia, PA 19129 2154988874
EAST_KENSINGTON East Kensington Neighbors Association 2439 Amber St, 19125 Madison Gould 2439 Amber St, 19125 2154701141
EAST_OAK_LANE Oak Lane Community Action Association P.O. Box 2926, Philadelphia, PA. 19141 Freida Williams 815 Asbury Terrace, 19126 2155494328
EAST_PARKSIDE East Parkside Residential Association 4260 Parkside Ave. Philadelphia, PA 19104 Bryan Harris 4286 Parkside Ave. Philadelphia, PA 19104 2158776355
EAST_PARKSIDE Centennial Parkside Community Development Corporation 3479 West Girard Avenue P.O. Box 28050 Philadelphia, PA 19131 Chris Spahr P.O. Box 28050 Philadelphia, PA 19131 2672258356
EAST_PARKSIDE Viola Street Residents Association 4243 VIOLA STREET
PHILADELPHIA, PA 19104-1029
Gomez Lorraine 4243 VIOLA STREET PHILADELPHIA, PA 19104-1029 2672708726
EAST_PASSYUNK East Passyunk Crossing Civic Association (EPX) 1025 Mifflin Street Leon Malloy 1025 Mifflin Street 6097524576
EAST_PASSYUNK South Broad Street Neighborhood Association PO Box 54784, 19148 Anthony Bruttaniti 1432 S Broad Street, 19146 2152180300
EASTWICK Eastwick Friends & Neighbors Coalition 7720 Olympus Place Philadelphia, PA 19153 Ramona Rousseau-Reid 8402 Brunswick Pl, 19153 2673121510
EASTWICK 40th Democratic Ward Mercy Wellness Center 2801 Island Avenue- 2nd Floor, 19153 Edward Thornton 3025 S. 74th Street Philadelphia, Pennsylvania 19153 United States 2158343414
EASTWICK Eastwick Community Network 8415 Lyons Place, Philadelphia PA 19153 Brice Baker 7901 Mars Place Philadelphia, PA 19153 2157683058
EASTWICK 40th Ward Republicans PO Box 33355 Philadelphia, PA 19142-0555 Craig Melidosian PO Box 33355 Philadelphia, PA 19142-0555 2158681268
ELMWOOD Southwest Community Development Corporation 6328 Paschall Avenue Philadelphia, PA 19142 Cynthia Ryant 6328 Paschall Avenue Philadelphia, PA 19142 2157290804
FAIRMOUNT Fairmount Civic Association 2633 Aspen Street Philadelphia Philadelphia, PA 19130 Lawrence Reynolds 2633 Aspen Street, 19130 2159786638
FELTONVILLE Nueva Esperanza Housing and Economic Development 4261 North 5th Street Philadelphia, PA 19140 Quetcy Lozada 4261 N. 5th Street Philadelphia, PA 19140 (215)324-0746
FELTONVILLE ONE Feltonville and Olney Neighbors Empowered 351 E Roosevelt Blvd D Michael Blackie 351 E Roosevelt Blvd 2676504720
FELTONVILLE 42nd Democratic Ward PO Box 46121 Philadelphia, PA 19160 Shantey Lindsay PO Box 46121 Phila PA 19160 2152058061
FISHTOWN Fishtown Neighbors Association PO Box 3744, Phila Ian Wilson PO Box 3744 Philadelphia, PA 19125 2677024690
FISHTOWN Riverside of Fishtown Neighbors Association 1131 E Montgomery Ave Philadelphia, PA 19125 Larissa Staszkiw 1131 E Montgomery Ave Philadelphia, PA 19125 9088720942
FISHTOWN Fishtown Kensington Area Business Improvement District 1509 North Front Street, Suite 1 Marc Collazzo 1509 North Front Street, Suite 1 2677643725
FISHTOWN Olde Richmond Civic Association 2327 Huntingdon Street Michael Manfroni NA 2154691721
FISHTOWN New Kensington Community Development Corp 2771 Ruth St. Philadelphia, PA 19125 Jessica Hoffman 2771 Ruth St.  2154270350
FOX_CHASE Fox Chase Homeowners Association 7610 Burholme Ave Philadelphia, PA 19111 George Bezanis 8314 Alicia Street Philadelphia, PA 19111 2157421312
FOX_CHASE Burholme Community Town Watch and Civic Association 1128 Cottman Avenue, 19111 Aizaz Gill 1128 Tabor Lane Philadelphia, Pennsylvania 19111 2672884169
FRANCISVILLE United Francisville Civic Association 1531 FAIRMOUNT AVE, UNIT 2F PHILADELPHIA PHILADELPHIA, PA 19130 Darlene Cerullo 1531 FAIRMOUNT AVE UNIT 2F PHILADELPHIA, PA 19130 2672578432
FRANCISVILLE Community Land Trust Corporation 1500 W Thompson St, 19121 Vivian VanStory 1500 W Thompson St, 19121 2152323822
FRANCISVILLE Francisville Neighborhood Development Corporation 1708 Ridge Ave Philadelphia, PA 19130 Joseph McLaughlin 1708 Ridge Avenue Philadelphia, Pa 19130 3026859191
FRANCISVILLE Friends of Ogden Park 842 N Uber Street Philadelphia, PA 19130 Drew Kondylas 842 N Uber Street Philadelphia, PA 19130 2154328399
FRANKFORD Frankford CDC 4667 Paul Street Philadelphia, Pennsylvania 19124 Christine DeJesus 4667 Paul Street Philadelphia, Pa 19124 2157436580
FRANKLINVILLE 12th and Cambria Advisory Board 2901 N. 12th Street, Philadelphia, PA 19133 Norman Wooten 2922 N. 12th Street, Philadelphia, PA 19133 2152260830
FRANKLINVILLE Nicetown-Tioga Improvement Team 3621 N 11th St, Phila PA 19140 Cynthia Barnes 3621 N 11th St, Phila PA 19140 2672583111
GARDEN_COURT Garden Court Community Association PO Box 16654, 19139 Mary Allegra 4603 Cedar Ave Philadelphia, PA 19143 United States 2157267535
GERMANTOWN_EAST Faith Community Development Corporation (FCDC) 108 East Price Street Philadelphia, PA. 19144 Ines Love 108 East Price Street Faith Community Development Corporation (FCDC) Philadelphia, PA 19144 2677704746
GERMANTOWN_EAST Chew and Chelten Community Development Corporation 5607 Crowson Street Douglas Rucker 5607 Crowson Street Philadelphia, PA 19144 2677788009
GERMANTOWN_EAST Awbury Arboretum Neighbors P.O. Box 20599 Brenna Kelly 1138 E. Haines Street 6462690712
GERMANTOWN_EAST Penn Area Neighborhood Association P.O. Box 44618 Philadelphia, PA 19144 Nicholas Covolus P.O. Box 44618 Philadelphia, PA 19144 2154352875
GERMANTOWN_EAST Chew and Belfield Neighbors Club Incorporated 6211 W Chew Avenue OR PO BOX 14134 Rev. Chester H. Williams PO Box 14134/ 6211 Chew Ave, 19138 2158498021
GERMANTOWN_MORTON 59th Democratic Ward 443 E. Haines Street, 19144 Patrick Jones 944 E. Rittenhouse Street, 19138 2155261198
GERMANTOWN_PENN_KNOX Penn Knox Neighborhood Association 5320 Germantown Ave Irving Vaughn NA 2678252902
GERMANTOWN_SOUTHWEST SoLo/Germantown Civic Association 4908 Wayne Ave, 19144 Allison Weiss 4908 Wayne Ave, 19144 2158435555
GERMANTOWN_SOUTHWEST Concerned Neighbors of Greater Germantown, Inc.  4809 B Wayne Ave 19144 Marlene Pryor 28 W Logan St 19144 2153817522
GERMANTOWN_WEST_CENT West Chelten Neighbors Association P.O. Box 44342, Philadelphia PA 19144 Cory Kegerise P.O. Box 44342, Philadelphia PA 19144 2158687189
GERMANTOWN_WEST_CENT West Central Germantown Neighbors 131 West Walnut Lane, 19144 Phil Kane 131 West Walnut Lane, 19144 2677380407
GERMANY_HILL Ridge Park Civic Association P.O. Box 35066, 19128 Marlene Schleifer 4876 Smick Street, Phila. Pa. 19127 2152066386
GIRARD_ESTATES Girard Estate Neighbors Association PO Box 20116 Philadelphia, pA 19145 Paul Rossi PO Box 20116 Philadelphia, PA 19145 2152874715
GIRARD_ESTATES Broad Street West Civic Association 1525 W Porter Street, Phialdelphia, PA 19145 Henry Di Antonio 1525 West Porter Street, Philadelphia, PA 19145 2156689126
GIRARD_ESTATES Girard Estate Area Residents (GEAR) 2508 S. 18th St, Phila PA 19145 Jody Della Barba 2508 S. 18th St, Phila PA 19145 2153346673
GLENWOOD Allegheny West Civic Association 3101 N. 22nd Street Philadelphia, PA 19132 Ronald Hinton Panati Recreation Center 3101 N. 22nd Street Philadelphia, PA 19132 2672495214
GRADUATE_HOSPITAL South of South Neighborhood Association (SOSNA) 1901 Washington Avenue *OFC B Philadelphia, PA 19146 Nicole Koedyker 1901 Washington Avenue *OFC B Philadelphia, PA 19146 2157328446
GRADUATE_HOSPITAL North of Washington Avenue Coalition 2304 Madison Square, Philadelphia 19146 Madeline Shikomba 2304 Madison Square, Philadelphia 19146 2157326278
GRADUATE_HOSPITAL Washington Avenue Property Owners Association c/o Knickerbocker Properties, 2118 Washington Avenue Suite 2000 Philadelphia, Pennsylvania 19146 Thomas Donatucci, III 1901 Washington Avenue, 19146 2155455755
GRAYS_FERRY Tasker-Morris Neighbors Association 1539 S. Patton St. Philadelphia, PA 19145 Charles Reeves 1539 S. Patton St. Philadelphia, PA 19145 2672343979
GRAYS_FERRY Grays Ferry Civic Association 2646 Reed Street Philadelphia, PA 19146 Michael Bradley 2646 Reed Street Philadelphia, PA 19146 2677737587
GRAYS_FERRY 36th Ward GOP 2646 Reed Street, Philadelphia, PA 19146 Michael Bradley 2646 Reed Street, Philadelphia, PA 19146 2677737587
GRAYS_FERRY Residents Organized for Advocacy and Direction 2615 Wharton Street Philadelphia, Pennsylvania 19146 Meeka Outlaw 1530 s. taney street philadelphia, pa 19146 2675817490
GRAYS_FERRY Grays Ferry Community Council 1501 s. 29th Street, Phila, PA 19146 Carmine Zulli 3637 Reed Street Philadelphia, PA 19146 2673221645
HADDINGTON 4th Democratic Ward 4035 Lansdowne Avenue Andre Sawyer 6515 Haverford Avenue, 19151 2674441634
HADDINGTON HMC Squared Community Association, INC Carroll Park Center for Hope, Help, & Healing 1536 N 59th Street, Philadelphia, PA 19151 Eloise Young 1435 N Redfield Street Philadelphia, Pa 19151 United States 2158399753
HARROWGATE Port Richmond Industrial Development Enterprise (PRIDE) 3535 Amber Street Philadelphia , PA 19134 Bow Lewis 3535 Amber Street Philadelphia , PA 19134 2155355200
HARROWGATE Harrowgate Civic Association 3640 Emerald Street Philadelphia , PA 19134 Shannon Farrell 3640 Emerald Street Philadelphia, PA 19134 2676944347
HARROWGATE Kensington Independent Civic Association 722 E. Willard Street, 19134 Marnie Loughrey 722 E. Willard Street, 19134 2154252165
HARROWGATE Impact Community Development Corporation 1952 East Allegheny Avenue, 19134 Rolando Sanchez 1952 East Allegheny Avenue, 19134 2157391600
HARTRANFT Asociacion Puertorriquenos En Marcha (APM) 600 Diamond Street, 19122 Victoria Cubillos-Cañón 600 Diamond Street, 19122 2672967215
HARTRANFT 37th Ward Executive Democratic Committee 939 West Silver Street, 19133 El Amor Mapenzi Brawn Ali 939 West Silver Street, Philadelphia, PA 19133 2152239329
HARTRANFT Village of Arts and Humanities 2544 Germantown Avenue Philadelphia, PA 19103 Aviva Kapust 2544 Germantown Avenue Philadelphia, PA 19133 4155315575
HARTRANFT Temple Area Property Association (TAPA) 1639 N. Hancock Street, Suite 307 Philadelphia Philadelphia, PA 19122 United States Peter Crawford 1639 N. Hancock Street, Suite 307 Philadelphia, PA 19122 United States 2158963863
HAWTHORNE Hawthorne Empowerment Coalition 1346 Webster Street, 19147 Albert Hicks 1346 Webster Street Philadelphia, PA 19147 2156947528
HOLMESBURG Holmesburg Civic Association P.O. BOX 39295, 19136 Tara Gontek 4561 Oakmont St philadelphia 19136 United States 2156052146
HUNTING_PARK 43rd Democratic Ward P.O Box 9727 Philadelphia, PA 19140 Martin A Strom 3726 North 8th Street Philadelphia, PA 19140 2673034989
HUNTING_PARK Hunting Park Connected 1300 W Hunting Park Avenue Philadelphia, PA 19140 Wadia Gardiner 1336 W Hunting Park Avenue Philadelphia, PA 19140 4042546529
HUNTING_PARK Hunting Park Neighborhood Advisory Committee 3760 N Delhi Street Philadelphia Philadelphia, PA 19140 Charles Lanier 3760 N Delhi St, 19140 2152255560
INDUSTRIAL Philly Thrive (SWPDC) 3108 Tasker St.  Rodney Ray 3108 Tasker St. Philadelphia, PA 19145 2159604080
INDUSTRIAL Packer Park Civic Association 3310 South 20th Street Phila Phila, Pa 19145 Barbara Capozzi 3310 South 20th Street Phila, Pa 19145 2679730848
JUNIATA_PARK Juniata Park Civic Association 4124 ‘L’ Street 19124 Kate Clarke 4124 L Street 19124 2157710660
KINGSESSING Earths Keepers Inc P.O. BOX 22714, 19143 Enoch Amen Ra-El P.O. BOX 22714, 19143 8002375131
KINGSESSING 51st Ward Democratic Executive Committee 5030 Springfield Ave, Philadelphia, PA 19143 Gregory R. Benjamin 5030 Springfield Ave, Philadelphia, PA 19143 2672549972
KINGSESSING Kingsessing Area Civic Association 1313 S. 49th Street Philadelphia, PA 19143 Dianne Settles 1313 South 49th Street, Philadelphia, PA 19143 2676025279
KINGSESSING Southwest Philadelphia District Services (SWPDS) 1557 North Valley Road, Pottstown, PA 19464 Michael Ross 1557 North Valley Road, Pottstown, PA 4842509055
KINGSESSING 51st Republican Ward 5513 PASCHALL AVE, Box 19820 Philadelphia Philadelphia, PA 19143 Andrew Gentsch Box 19820 Philadelphia, PA 19143 (215)729-1090
KINGSESSING Snyderville Community Development Corporation (SCDC) 1417 S 58th Street, 19143 Carolina Baltazar Edwards, MSW, PhD PO Box 867 2673662055
LAWNDALE 35th Democratic Ward 620 E. Allengrove Street, 19120 Philip Grutzmacher 485 E. Devereaux Avenue Philadelphia, PA 19111 2157226694
LAWNDALE 35th Ward GOP Committee 405 Van Kirk Street Philadelphia, PA 19120 Linwood Holland 405 Van Kirk Street Philadelphia, PA 19120 2674076732
LAWNDALE Lawncrest Community Association 620 E. Allengrove Steet, 19120 Philip Grutzmacher 485 Devereaux Avenue Philadelphia, PA 19111 2157226694
LOGAN Logan Civic Association 6517 N Park Avenue, Philadelphia, PA 19126 Eric Brice 6517 N Park Avenue, Philadelphia, PA 19126 2155194805
LOGAN 49th Ward GOP 500 E Godfrey Avenue Philadelphia, PA 19120 Jacinth Roberts 500 E Godfrey Avenue Philadelphia, PA 19120 2672657981
LOGAN Logan Community Enterprise Center, Inc.  5510 N. Marshall St. Philadelphia, PA 19140 Darrell Choates 1631 W. Susquehanna Avenue Philadelphia, Pennsylvania 19121 2679873040
LOGAN Nicetown CDC 4414 Germantown Avenue, 3rd floor Suites A&B, 19140 Majeedah Rashid 4414 Germantown Avenue, 19140 2153291824
LOGAN_SQUARE Logan Square Neighborhood Association 143 N. 22nd Street, Unit D, 19103 Drew Murray 143 N. 22nd Street, Unit D, 19103 6102560588
LOWER_MOYAMENSING Seventh Street Community Civic Association 415 Hoffman Street, 19148 Bruce Baldwin 415 Hoffman Street, 19148 2673049161
LOWER_MOYAMENSING Lower Moyamensing Civic Association 2437 S. Broad Street Philadelphia, PA 19148 Patti Tahan 2437 S. Broad Street, 19148 2675449597
MANAYUNK Central Manayunk Council 109 Roxborough Avenue, Philadelphia, PA 19127 John Teague 109 Roxborough Avenue, Philadelphia, PA 19127 2155201676
MANAYUNK Manayunk Neighborhood Council 471 Ripka Street, 19128 John Hunter 4308 Terrace Street 2154872474
MANTUA Mantua Civic Association P.O. Box 7701, 19104 DeWayne Drummond 3412 Haverford Avenue 2672051771
MANTUA Lancaster Avenue 21st Century Business Association 3500 Lancaster Ave, 19104 Kwaku Boateng 3500 Lancaster Avenue 2672419199
MANTUA 24th Democratic Ward 3917 Reno Street Philadelphia, Pa 19104-4807 Bernadette Ingrid Wyche 3917 Reno Street Philadelphia, Pa 19104-4807 2676700522
MAYFAIR Mayfair Civic Association 3309 Tudor st. Philadelphia, PA 19136 Kevin Leonard 2990 St. Vincent St Philadelphia, PA 19152 2675384668
MAYFAIR Mayfair Business Improvement District (BID) 2990 St. Vincent Street, Second Floor, 19149 Marc Collazzo 2990 St. Vincent Street, Second Floor, 19149 2675384668
MELROSE_PARK_GARDENS Upper North Coalition of Community Councils 121 East Colonial Street, Philadelphia, PA 19120 Isaac Jackson 121 E. Colonial Street, Philadelphia, PA 19120 4848329121
MILL_CREEK Mill Creek Advisory Council 4700 Brown Street Philadelphia , PA 19139 Patrick Rushing 4700 Brown Street Philadelphia , PA 19139 2673143694
MILL_CREEK West Philly Together 605 N. 52nd Street, Philadelphia , PA 19131 Yancy Harrell 4927 Parkside Avenue North, Philadelphia, PA 19131 2676067773
MILL_CREEK 44th Democratic Ward PO Box 9376, 19139 Willie Jordan P.O. Box 9376 P.O. BOX 9376 PHILADELPHIA Philadelphia 2156687128
MILLBROOK Millbrook Civic Association 4330 Deerpath lane Philadelphia, Pa 19154 John Kradzinski 4330 Deerpath Lane Phila, PA 19154 2152819785
MORRELL_PARK West Torresdale/Morrell Park Civic Association 3352 Kayford Circle, 19114 Heather Stanton 3352 Kayford Circle, 19114 2155149569
MOUNT_AIRY_EAST 22nd Ward Democratic Committee P.O. Box 27211, Philadelphia, PA 19118 Carla Cain P.O. Box 27211, Philadelphia, PA 19118 2157584405
MOUNT_AIRY_EAST Cliveden Hills Association P.O. Box 12317 Philadelphia, PA 19119 United States Adrienne Glenn 6342 Ardleigh Street, Philadelphia, PA 19138 2152246024
MOUNT_AIRY_EAST East Mt. Airy Neighbors 7301 Germantown Ave., Phila PA 19119 Natalia Serejko 7301 Germantown Ave., Phila PA 19119 2152424170
MOUNT_AIRY_WEST Blue Bell Hill Civic Association 627 West Johnson Street Philadelphia, PA 19144 Stanley Zawislak 627 West Johnson ST, Phila, PA 19144 Philadelphia, PA 19144 2156034217
MOUNT_AIRY_WEST Mt. Airy Business Improvement District P.O. Box 18879 Philadelphia Philadelphia, Pennsylvania 19119 Janis Risch PO Box 18879 Philadelphia, Pennsylvania 19119 2158446492
MOUNT_AIRY_WEST West Mount Airy Neighbors, Inc.  6703 Germantown Ave, Suite 200, 19119 Ralph Pinkus 6703 Germantown Ave. - Suite 200 Philadelphia, PA 19119 2155235320
NEWBOLD Newbold Civic Association 1617 S. Iseminger Street Philadelphia, PA 19148 Janette Spirk 1617 S. Iseminger Street Philadelphia, PA 19148 6107623183
NICETOWN 13th Republican Ward 4503 N. Carlisle St. Philadelphia Philadelphia, PA 19140 Carnel Harley 4503 N. Carlisle Philadelphia, PA 19140 2672502509
NICETOWN 13th Democratic Ward P.O Box 25563 3853 n. 19th st Phila, Pa 19140 Charles Carn 3853 N. 19th St. p.o. Box 25563 Phila, Pa. 19140 2672694608
NORTH_CENTRAL Friends of the 47th Ward 1301 North Smedley Street, Philadelphia, PA 19121 Louise Bundy 1301 North Smedley Street, Philadelphia, PA 19121 2159093157
NORTH_CENTRAL The Good News Community Organization 1631 C.B. Moore Ave 19121 Dorothy Kelly 1631 C.B. Moore Ave 19121 2673126508
NORTH_CENTRAL MAP Holistic CDC 1510 W Stiles Street Philadelphia, PA 19121 Lewis Nash 1533 W Stiles Street Philadelphia, PA 19121 2159836894
NORTH_CENTRAL St. Elizabeth’s RCO 1845 N. 23rd Street Priscilla Tee Bennett 1845 N. 23rd Street 2672536178
NORTH_CENTRAL 32nd Democratic Ward 2112 N Woodstock St, Philadelphia, PA 19121 Judith Robinson 2112 N Woodstock St 2152356517
NORTH_CENTRAL Beech Community Services Incorporated 1510 Cecil B. Moore Avenue, Suite 100, Philadelphia PA 19121 Christine Brown 1510 Cecil B. Moore Avenue, Suite 100, Phila PA 19121 2157648824
NORTHEAST_AIRPORT Walton Park Civic Assn (WALPAC) 111821 Brandon Road 19154 Camille G. McColgan 11821 Brandon Rd Philadelphia PA 19154 2156370728
NORTHEAST_AIRPORT Northeast Community Civic Alliance 9605 Leon Street Philadelphia Philadelphia, PA 19114 Thomas Neveil 9605 Leon Street Philadelphia, PA 19114 2679758423
NORTHEAST_AIRPORT Normandy Civic Association 2849 Narcissus Road, Phila., PA 19154 Kristine Owens 2835 Normandy Drive 2158065469
NORTHEAST_AIRPORT 66th Republican Ward 12751 Dunks Ferry Rd, Philadelphia, PA, 19154 Bill Pirolli 12751 Dunks Ferry Rd, Philadelphia, PA, 19154 2157386195
NORTHERN_LIBERTIES Northern Liberties Neighbors Association 700 N. 3rd St.  Philadelphia, Pa 19123 Larry Freedman 700 N. 3rd St., 1st Floor Philadelphia, PA 19123 United States 2159131939
NORTHWOOD Northwood Civic Association 4706 Ramona Avenue Philadelphia Philadelphia, Pennsylvania 19124 Joe Krause 4706 Ramona Avenue, 19124 2674998408
OGONTZ Concerned Neighbors for Change 2101 W. 65th Avenue Marlene Archie 2067 W 65th Avenue 2152245075
OGONTZ A Concerned Community Association (ACCA) 5801 Ogontz Ave. Phila., PA 19141 Sandra Broadus 5801 Ogontz Ave Philadelphia, PA 19141 2679786100
OGONTZ Belfield Area Neighbors Association (BANA) Love Missionary Fellowship Baptist Church, 5801 Ogontz Avenue Philadelphia Leni Johnson 5723 N 21st Street Philadelphia, PA 19138 2675776237
OLD_CITY Old City District 231 Market Street, 19106 Kate McGlinchey 231 Market Street, Phila. PA 19106 2155927929
OLD_CITY Center City Organized for Responsible Development 55 N Broad St Philadelphia, PA 19107 Kate Esposito 55 N Broad St Philadelphia, PA 19107 6092730170
OLD_CITY Franklin Bridge North Neighbors Inc 411 Vine St, 19106 Robert S Gurmankin NA 2154959440
OLD_CITY 5th Ward Republican RCO 1500 Walnut Street Suite 900, Philadelphia, PA 19102 Mike Cibik 1500 Walnut Street Suite 900 Phialdelphia, PA 19102 2157351060
OLD_KENSINGTON West Girard Progress 719 W. Girard Avenue Philadelphia, PA 19123 Barbara Pennock 719 W. Girard Avenue Philadelphia, PA 19123 2157835671
OLD_KENSINGTON South Kensington Community Partners 1301 North 2nd Street Philadelphia, PA 19122 Ellie Matthews 1301 N 2nd Street Philadelphia Pa 19122 2154273463
OLD_KENSINGTON Olde Kensington Neighborhood Association 420 W Thompson St, 19122 Annie Moss 420 W Thompson St, 19122 2674075950
OLNEY Greater Philadelphia Asian Social Service Center 4943 N. 5th Street Philadelphia, PA 19120 Mr. YoAn Kim 4943 N. 5th St., Phila. PA 19120 2154561662
OVERBROOK Overbrook West Neighbors CDC 6361 Lancaster Ave, 19151 Philadelphia, Pennsylvania 19151 Gregory Allen 6361 Lancaster Ave, 19151 2156816937
OVERBROOK 34th Democratic Ward 5536 Hunter Street, Philadelphia, PA 19131 Kerry Wilson 5536 Hunter Street, Philadelphia, PA 19131 2157782793
OVERBROOK 34th Ward Republican Committee 7036 Woodbine Avenue Philadelphia, Pennsylvania 19151 Paul P. Panepinto 7036 Woodbine Avenue Philadelphia, PA 19151 2156019289
OVERBROOK Neighbors of Overbrook Association (NOAH) 1026 Edgemore Rd. Philadelphia, PA 19151 Pauline Rosenberg 1026 Edgemore Rd. Philadelphia, PA 19151 2158791071
OVERBROOK Overbrook Park Civic Association 1300 N 75th Street Rose Playground Philadelphia, PA 19151 Marc Reason 1605 Farrington Rd , 19151 4842401528
OVERBROOK Overbrook Farms Club 6376 City Ave Philadelphia, PA 19151 Cynthia Cronin-Kardon 6447 Overbrook Avenue Philadelphia, PA 19151 6105703190
OXFORD_CIRCLE Northeast Philadelphia Chinese Chamber of Commerce 6401 Castor Ave, Philadelphia, PA 19149 Clark Lambo 6401 Castor Ave, Philadelphia, PA 19149 6109995147
OXFORD_CIRCLE Community on the Rise 6601 Rutland Street Philadelphia, PA 19149 Sharyn Solomon 6601 Rutland St 2158139806
OXFORD_CIRCLE Take Back Your Neighborhood 6727 Eastwood St Phila, PA 19149 Robert Rudnitsky 6727 Eastwood St Phila, PA 19149 2154324875
OXFORD_CIRCLE 54th Republican Ward 6923 Rutland Street Philadelphia Philadelphia, Pennsylvania 19149 Fran Woodruff 6923 Rutland Street Philadelphia, PA 19149 2157601306
OXFORD_CIRCLE 53rd Democratic Ward 716 Glenview Street, 19111 Janice Sulman 716 GLENVIEW STREET PHILADELHIA, PA 19111 2159726000
OXFORD_CIRCLE Oxford Circle Civic Association 1427 Higbee St, 19149 Nancy Hampson 1427 Higbee St, 19149 NA 2155378431
OXFORD_CIRCLE 53rd Republican Ward 6908 OAKLEY ST PHILADELPHIA PHILADELPHIA, Pennsylvania 19111 United States Gary Grisafi 6908 Oakley St, Philadelphia, PA 19111 2158208553
PACKER_PARK Friends of Penrose 2541 South Broad Street, Philadelphia, PA 19148 Vincent DeFino 2541 South Broad Street, Philadelphia, PA 19148 2156515099
PACKER_PARK Friends of Historic FDR Park 1500 Pattison Avenue Philadelphia, PA 19145 Todd Pride 1500 Pattison Avenue Philadelphia, PA 19145 4847469881
PARKWOOD_MANOR Parkwood Area Civic Association 3529 Vinton Rd., Philadelphia, PA 19154 Mike Doyle 12619 Dunks Ferry Rd. Philadelphia, PA 19154 2672438599
PASCHALL Empowered Community Development Corporation P.O. Box 23428 5803 Kingsessing Avenue Philadelphia, PA 19143 Marsha Wall 6011 Trinity Street Philadelphia, PA 19143 2517292389
PASSYUNK_SQUARE Passyunk Square Civic Association PO Box 18052, 19147 Sarah Anton PO Box 18052, 19147 2152665088
PENNSPORT 1st Ward Republicans 1026 Greenwich Street, Philadelphia, PA 19147 Billy Lanzilotti Jr.  1026 Greenwich Street, Philadelphia, PA 19147 2158064650
PENNYPACK_PARK 64th Republican Ward 3029 Nesper St Philadelphia, Pennsylvania 19152 Bob Cummings 3029 nesper st 19152 2152758738
PENNYPACK_PARK 64th Democratic Ward 7535 Battersby Street Philadelphia, PA 19152 Peter McDermott 7535 Battersby Street Philadelphia, PA 19152 2674546851
PENROSE Paschall Betterment League, Inc 2210 S 71st St, 3rd Floor Philadelphia , PA 19142 Gloria R Kellam 7132 Greenway Ave Philadelphia , PA 19142 2153136723
POINT_BREEZE South Philadelphia H.O.M.E.S., Inc 1444 Point Breeze Avenue, 19146 Claudia Sherrod 1444 Point Breeze Avenue, 19145 2153344430
POINT_BREEZE Point Breeze Community Development Coalition 1701 S. 18th Street Philadelphia, PA 19146 Albert Littlepage 1801 S. 18th Street Philadelphia, PA 19146 2672401855
POINT_BREEZE Point Breeze Civic Association 1518 South 22nd Street, 19146 Ronald Smith 1518 South 22nd Street, 19146 2158163333
POINT_BREEZE Concerned Citizens of Point Breeze Concerned Citizens of Point Breeze 2122 Wharton Street Philadelphia, Pa 19146 Theressa McCormick 2122 Wharton Street Philadelphia, Pa 19146 2154904827
POINT_BREEZE East Point Breeze Neighbors PO Box 54891 Philadelphia, PA 19148 Miguel Garces 1617 Manton Street Philadelphia, Pennsylvania 19146 6095567852
QUEEN_VILLAGE South Street Headhouse District PO Box 63675, Headhouse Shambles, 2nd and Pine Street, 19147 Michael Harris PO Box 63675, 19147 2154133713
QUEEN_VILLAGE Queen Village Neighbors Association 417 South Street c/o Joynture. Office 23 Philadelphia, PA 19147 Lucy Erdelac P. O. Box 63763 Philadelphia, PA 10147 2153390975
RHAWNHURST Rhawnhurst Civic Association 7702 Loretto Ave Philadelphia, PA 19111 Ken Kline 7702 Loretto Ave Philadelphia, PA 19111 2157453311
RICHMOND 45th Democratic Ward 2824 Plum Street Philadelphia, PA 19137 Harry Enggasser 2824 Plum Street Philadelphia, PA 19137 2672533189
RICHMOND South Port Richmond Civic Association 2974 Almond Street Philadelphia, PA 19134 United States John Kalicki PO Box 29362, Philadelphia, PA 19125 Philadelphia, PA 19134 United States 4845337157
RICHMOND Somerset Neighbors for Better Living 2771 Ruth Street, Philadelphia, PA 19134 Nicholas Fury 2815 Ruth Street, Philadelphia, PA 19134 2156680057
RICHMOND Port Richmond On Patrol & Civic Association (PROPAC) PROPAC 3625 Gaul Street Philadelphia, PA 19134 United States Ken Paul 3615 Miller St, 19134 2153809783
RITTENHOUSE Center City Residents Association (CCRA) 1608 WALNUT ST 12th Fl PHILADELPHIA, PA - Pennsylvania 19103 Travis Oliver 1608 Walnut St, 12th Fl, 19103 2155466719
RITTENHOUSE Fitler Square Neighborhood Association 1500 Market St. Suite 3500E Philadelphia, PA 19102 Matthew Whitehorn 1500 Market St Suite 3500E Philadelphia, PA 19102 2155757000
RITTENHOUSE South Street West Improvement District, Inc 1511 South Street Philadelphia , pa 19146 Marcus Ferreira 1620 South Street Unit B Philadelphia , PA 19146 2679396272
RIVERFRONT Pennsport Civic Association 1837 South Second Street, 19148 Patrick Fitzmaurice 108 McKean Street Philadelphia, PA 19148 2156688893
RIVERFRONT Whitman Council Incorporated 2455 S. 3rd Street Philadelphia, Pennsylvania 19148 Mark Kapczynski 2455 S Third Street, Philadelphia PA 19148 2154684056
ROXBOROUGH Central Roxborough Civic Association (CRCA) PO Box 25859, 19128 Celeste Hardester 368 Green Lane Philadelphia, PA 19128 2155181799
ROXBOROUGH Wissahickon Neighbors Civic Association (WNCA) 100 DAWSON ST PHILADELPHIA PHILADELPHIA, PA 19127 Joseph A Bergan 3803 Cresson St., 19127 6103066917
ROXBOROUGH Roxborough Development Corporation 6120 Ridge Avenue Philadelphia, PA 19128 James Calamia 6120 Ridge Avenue Philadelphia, PA 19128 2155082358
SOCIETY_HILL Society Hill Civic Association SHCA P.O. Box 63503 Phila, PA 19147 Paul Boni 325 Chestnut Street, Ste 1109 2159890034
SOMERTON Somerton Civic Association 13015 Proctor Road Philadelphia, PA 19116 Chris Bordelon 13015 Proctor Road Philadelphia, PA 19116 2679399857
SPRING_GARDEN Spring Garden Civic Association 601 N. 17th St. 1st Floor Phila., PA 19130 Patricia Freeland 601 N. 17th St. 1st Floor Storefront Phila., PA 19130 2158020334
SPRUCE_HILL Spruce Hill Community Association 257 S 45th St, 19104 Barry Grossbach 257 S 45th St, 19104 2153820365
SPRUCE_HILL West Philly United Neighbors 10 S 43rd Street, Philadelphia, PA 19104 Ang Sun, Ph.D.  10 S 43rd St, Philadelphia, PA 19104 2678086280
SPRUCE_HILL West Philadelphia Neighbors for Progressive Planning and Preservation 4533 Pine Street, 19143 Mary McGettigan 4533 Pine Street, 19143 2154729042
SPRUCE_HILL Baltimore Avenue Business Association 4740 Baltimore Avenue, Phila PA 19143 Katherine Dowdell 4740 Baltimore Avenue Philadelphia, PA 19143 United States 2158050370
SPRUCE_HILL Friends of Clark Park P.O. Box 31908 Philadelphia, PA 19104 Lisa McDonald Hanes 633 S 42nd St Philadelphia, PA 19104 2152052945
STADIUM_DISTRICT Stadium Community Council 3124 SOUTH 13TH STREET PHILA, PA 19148 Ivan Cohen 3100 S 13th St.  2677605023
STADIUM_DISTRICT Bigler Civic Association 2843 South Adler St., Philadelphia, PA 19148 Rosemary Morrison 2843 South Adler St., Philadelphia, PA 19148 2672052091
STADIUM_DISTRICT Veterans Stadium Neighbors Civic Association P.O. Box 54599, Philadelphia, PA 19148 Antonio Parretta 3117 S. 13th Street, Philadelphia, PA 19148 2153844363
STADIUM_DISTRICT South Philadelphia Communities Civic Association (SPCCA) 1100 Bigler Street, 2nd Floor, Philadelphia, PA 19148 Rich Cedrone 2736 S Iseminger Street, Philadelphia PA, 19148 6107210006
STANTON Uptown Entertainment and Development Corporation 2227 N. Broad St. 2nd Floor Philadelphia, PA 19132-4502 Linda Richardson 2227 N. Broad Street Suite 2F Philadelphia, PA 19132 2152361878
STANTON Heritage Homeowners Association 1933 N. 23rd Street Philadelphia Philadelphia, Pennsylvania 19121/2024 Gracie Barcliff 1747 N 25th St 2157695899
STANTON 16th Republican Ward 2321 N Carlisle Street, Philadelphia, PA 19132 Tyler Ray 2321 N Carlisle Street, Philadelphia, PA 19132 2156507048
STANTON North Central Philadelphia Susquehanna Community Development Corporation 1631 W. Susquehanna Avenue Philadelphia, Pennsylvania 19121 Tinamarie Russell

1631 W. Susquehanna Avenue Philadelphia, Pennsylvania 19121

United States
2159801151
STRAWBERRY_MANSION North Penn Community Action Council 2423 N 27th Street Henry Davis 2414 N. 27th Street,3rd Floor 2154372313
STRAWBERRY_MANSION Summerville RCO 2148 N. 30th Street Philadelphia, PA 19121 Tierra Younger 2148 N. 30th Street Philadelphia, PA 19121 2154391858
STRAWBERRY_MANSION Strawberry Mansion Community Concern 2640 N. Myrtlewood Street Philadelphia, PA 19132 Bonita Cummings 2640 Myrtlewood Street Philadelphia, PA 19132 2678479383
STRAWBERRY_MANSION Strawberry Mansion Community Development Corporation 2829 West Diamond Street Philadelphia, PA 19121 Tonnetta Graham 2829 West Diamond Street Philadelphia, PA 19121 2674397665
STRAWBERRY_MANSION 28th Democratic Ward 2521 N. 30th Street Philadelphia, PA 19132 Lester Emerson 2521 N 30th Street Philadelphia, PA 19132 2672287520
STRAWBERRY_MANSION All In The Family Group Associates Incorporated 2402 n 26TH STREET PHILA, PA 19132 Odessa Tate 2402 N. 26th Street Phila, Pa 19132 2154352581
TACONY Tacony Civic Association P.O. Box 8979, 19135 Louis Iatarola 4600 Tyson Ave Philadelphia, Pa 19135 2154326520
TACONY North East Quality of Life Coalition 6628 Tulip St phila, pa 19135 Barbara Rup 6628 Tulip St, 19135 2675326341
TIOGA Tioga United, Inc.  1539 W. Venango Street Philadelphia, PA 19140 Veronica Holman 1934 W. Venango Street, 19140 2152526845
TIOGA Upper North Neighbors Association 2823 N. Croskey Street, Philadelphia, PA 19132 Dwayne Lilley 2834 N. Croskey Street, Philadelphia, PA 19132 2674323665
TORRESDALE East Torresdale Civic Association P.O. Box 65412, Philadelphia, PA 19155 Joseph Carson 9211 Melrose Street, 19114-4217 (215)332-0914
TORRESDALE Upper Holmesburg Civic Association 4415 Millett St.  Philadelphia, Pennsylvania 19136 Stanley Cywinski 4415 Millett St, 19136 2159908128
UNIVERSITY_CITY Powelton Village Civic Association P.O. Box 7616 Philadelphia, PA 19101 United States John Phillips P.O. Box 7616 Philadelphia, PA 19101 United States 2153874223
UNIVERSITY_CITY 27th Republican Ward 4256 Regent Square, 19104 Timothy Reimer 648 South 51st St., Philadelphia, PA 19143 2154703896
UNIVERSITY_CITY Drexel Area Property Association 3070 Spring Garden Street, Philadelphia, Pennsylvania Gary Jonas 1145 Forrest Street, Conshohocken, PA, 19428 2156693412
UPPER_KENSINGTON Kensington Neighborhood Association 2910 Hartville Street Eduardo Esquivel 2910 Hartville Street 3147917889
UPPER_KENSINGTON HACE CDC 167 W. Allegheny Avenue Suite 200 Philadelphia, PA 19140 Stasia Monteiro 167 W. Allegheny Avenue Suite 200 Philadelphia, PA 19140 2679020764
UPPER_KENSINGTON 7th Ward Civic Association 133 E Westmoreland St Philadelphia, PA 19134 Joseph Evangelista 133 E Westmoreland St Philadelphia, PA 19134 2153601524
UPPER_ROXBOROUGH Residents of Shawmont Valley Association 399 Port Royal Avenue, 19128 Jamie Wyper 399 Port Royal Ave 2154601949
UPPER_ROXBOROUGH Upper Roxborough Civic Association 635 Summit Ave. Philadelphia, PA 19128 Rich Giordano 635 Summit Ave. Philadelphia, PA 19128 2158806454
WALNUT_HILL West Philadelphia Economic Development Council 255 S. 58th Street Philadelphia, PA 19139 Kyle Sampson 255 South 58th Street Philadelphia, PA 19139 2155012596
WALNUT_HILL Walnut Hill Community Association The Enterprise Center, Community Development Corporation Suite 1, 4548 Market Street Philadelphia , PA 19139 Dave Brindley NA 2154077182
WASHINGTON_SQUARE Washington Square West Civic Association 214 South 11th Street, 19107 Jonathan Broh 214 South 11th Street Philadelphia, PA 19107 2153809003
WEST_KENSINGTON Norris Square Community Alliance 174 Diamond Street Philadelphia, PA 19122 Zasha Morales 174 Diamond Street Philadelphia, PA 19122 2154268734
WEST_KENSINGTON Zulu Nation RCO 2045 N Lawrence Street Philadelphia, PA 19133 James “Bo” McCain 2355 N Fawn St Philadelphia, PA 19133 2155205686
WEST_OAK_LANE 10th Democratic Ward P.O. Box 683 Philadelphia Isabella Fitzgerald 1961 Penfield Street 2154298051
WEST_PARK 52nd Democratic Ward 2439 Golf Road Steve Jones 2439 golf road Phila, Pa 19131 2156685401
WEST_PARK 52nd Republican Ward 2438 N 54th Street 2438 N 52nd Street, 19131 Lamont Foreman 2438 N 54th Street, 19131 2159176888
WEST_PASSYUNK West Passyunk Neighbors Association (WPNA) PO Box 60505, 19145 Philadelphia, PA 19145 Elizabeth Crutchley 2232 S Lambert St Philadelphia, PA 19145 2158398826
WEST_POPLAR 14th Ward Democratic Executive Committee 1117 Mt. Vernon Street Philadelphia, PA 19123 Diane Monroe 1117 Mt. Vernon Street Philadelphia, Pennsylvania 19123 2156055618
WEST_POPLAR Richard Allen New Generation 1907 Ingersoll Street, Philadelphia, PA 19121 Bernard Gorham 6516 N. Camac Street, Philadelphia, PA 19126 2153172741
WEST_POWELTON West Powelton Saunders Park RCO 4209 Filbert St Pam Andrews 4209 Filbert St 6103489940
WINCHESTER_PARK Holme Circle Civic Association PO Box 14311 Philadelphia, PA 19115 Mike Fagan 3034 Fairfield Street, 19136 2672296004
WINCHESTER_PARK Winchester Park Civic Association 8115 Martindale Street Philadelphia, Pa 19136 Mary Ann Cicalese-Kiker 8115 Martindale Street Philadelphia, Pa 19136 2155146059
WISSAHICKON Wissahickon Interested Citizens Association 124 Sumac St, Philadelphia, PA 19128 Nicole Healy 124 Sumac St, Philadelphia, PA 19128 2152929558
WISSINOMING Wissinoming Civic Association 6126 Torresdale Ave Philadelphia, Pa 19135 John Barnes 6126 Torresdale Ave, Philadelphia, PA, 19135 2676209123
WISTER Baynton Hill Neighbors 51 East Penn St. Philadelphia, PA 19144 Joe McCarthy 51 East Penn St. Philadelphia, PA 19144 2158448118
WISTER 12th Ward Democratic Committee 5051 North Portico Street, Philadelphia, PA 19144 Theodore Stones 5051 North Portico Street, Philadelphia, PA 19144 2158696954
WISTER Wakefield 49ers Community Development and Improvement Association PO Box 25607, Phila PA 19144 Rosalind McKelvey PO Box 25607, Phila PA 19144 2152756853
WOODLAND_TERRACE Woodland Terrace HomeOwners Association 516 Woodland Terrace Philadelphia Philadelphia, Pennsylvania 19104 Katharine Beals 516 Woodland Terrace Philadelphia, Pennsylvania 19104 2152220954
WYNNEFIELD City Avenue Special Services District of Philadelphia and Lower Merion 1 Belmont Avenue Suite 425 Bala Cynwyd, PA 19004 Terrence Foley 1 Belmont Avenue Suite 425 Bala Cynwyd, PA 19004 6107470311
WYNNEFIELD Wynnefield Residents Association 5301 Overbrook Avenue Philadelphia, PA 19131 Michael Reid 2341 N. 52nd Street 2157718089
WYNNEFIELD_HEIGHTS Wynnefield Heights Civic Association P.O. Box#2874 Bala Cynwd, PA 19004 Monica Hawkins 2722 West Country Club Road Philadelphia, PA 19131 2672522367
YORKTOWN Yorktown 2035 1323 Betsy Ross Place, Phila, PA 19122 Jacob Peck 1818 Master St.  2673341996
YORKTOWN Yorktown Community Development Corporation 1300 W. Jefferson Street, Office Suite Philadelphia, PA 19122 Rochelle Johnson 1202 W. Oxford St.  2154323558
NA Central Delaware Advocacy Group (CDAG) PO Box 63682, Philadelphia, PA 19147 Matt Ruben 1000 N. Orianna St.,Philadelphia, PA 19123 2679777257

Use case and Improvements

Returning to our original use case, this analysis and model has successfully laid the foundation for achieving our vision of a Displacemnet Risk Tracking tool to be used by city governments.

1 Anticipating neighborhoods where home values may increase

Achieved: This model accurately predicts the risk of new construction across the city, and has identified neighborhoods at risk of experiencing displacement. Our exploratory analysis has also indicated areas with large recent changes in home values. Next steps: We would like to incorporate the recent change in home value into our Risk Map at the neighborhood level.

2 Identifying trusted community partners in each area of the city

Achieved: A list of RCOs is joined into our neighborhood list. Next Steps: We would like to create an interactive risk map that displays these partners upon clicking on a neighborhood on the map.

3 By estimating the benefit various policy levers, such as flip taxes or home renovation subsidies, can have on the long-time residents of each neighborhood.

Achieved: We have indicated the changes in home value that have been recently occurring. Next Steps: Ideally, we can quantify the effects of various policy levers. From there, we would automate a cost and benefit calculation using the quantified policy outcomes and home values.

We hope that other actors who are similarly concerned with homeowner displacement can continue to build upon both this model and dashboard tool. This kind of tool would be incredibly helpful to planners and policy makers attempting to stem what feels like an inevitable increase in displacement of long time residents in growing cities. Not only is this displacement not a given, but we currently have all the information needed to tackle the issue in a precise and data-driven way.


  1. Pew Charitable Trusts. 2016. Philadelphia’s Changing Neighborhoods: Gentrificaiton and other shifts since 2000. https://www.pewtrusts.org/~/media/assets/2016/05/philadelphias_changing_neighborhoods.pdf↩︎